कैसे एक सूची में एक स्ट्रिंग विभाजित करने के लिए?


574

मैं चाहता हूं कि मेरा पायथन फ़ंक्शन एक वाक्य (इनपुट) को विभाजित करने और प्रत्येक शब्द को एक सूची में संग्रहीत करने के लिए। मेरा वर्तमान कोड वाक्य को विभाजित करता है, लेकिन शब्दों को सूची के रूप में संग्रहीत नहीं करता है। मैं उसको कैसे करू?

def split_line(text):

    # split the text
    words = text.split()

    # for each word in the line:
    for word in words:

        # print the word
        print(words)

1
इस कोड का कौन सा भाग काम नहीं करता है? क्या आप त्रुटि संदेश या समस्या आप प्रदान कर सकते हैं?
एस.लॉट

4
जैसा कि यह है, आप सूची में प्रत्येक शब्द के लिए शब्दों की पूरी सूची मुद्रित करेंगे। मुझे लगता है कि आप print(word)अपनी अंतिम पंक्ति के रूप में उपयोग करना चाहते थे ।
ट्रेग्रे

जवाबों:


487
text.split()

यह एक सूची में प्रत्येक शब्द को संग्रहीत करने के लिए पर्याप्त होना चाहिए। wordsवाक्य से पहले से ही शब्दों की एक सूची है, इसलिए लूप की कोई आवश्यकता नहीं है।

दूसरा, यह एक टाइपो हो सकता है, लेकिन आपके पास अपना लूप थोड़ा गड़बड़ है। यदि आप वास्तव में परिशिष्ट का उपयोग करना चाहते हैं, तो यह होगा:

words.append(word)

नहीं

word.append(words)

447

व्हॉट्सएप के textकिसी भी लगातार रन पर स्ट्रिंग को विभाजित करता है।

words = text.split()      

स्ट्रिंग textको सीमांकक पर विभाजित करें ",":।

words = text.split(",")   

वेरिएबल शब्द एक होगा listऔर इसमें textसीमांकक से विभाजित शब्द शामिल होंगे ।


86

str.split ()

स्ट्रिंग में शब्दों की एक सूची लौटाएं , सीम का उपयोग सीमांकक के रूप में करें ... यदि सीप निर्दिष्ट नहीं है या कोई नहीं है, तो एक अलग विभाजन एल्गोरिथ्म लागू किया जाता है: लगातार व्हाट्सएप के रन को एक एकल विभाजक माना जाता है, और परिणाम में शामिल होगा प्रारंभ या अंत में कोई खाली तार नहीं है यदि स्ट्रिंग में अग्रणी या पीछे वाला व्हाट्सएप है।

>>> line="a sentence with a few words"
>>> line.split()
['a', 'sentence', 'with', 'a', 'few', 'words']
>>> 


52

आप अपने वाक्य-ए-सूची के साथ क्या करने की योजना के आधार पर, आप प्राकृतिक भाषा टूक किट को देखना चाह सकते हैं । यह टेक्स्ट प्रोसेसिंग और मूल्यांकन से संबंधित है। आप अपनी समस्या को हल करने के लिए भी इसका उपयोग कर सकते हैं:

import nltk
words = nltk.word_tokenize(raw_sentence)

यह विराम चिह्न को अलग करने का अतिरिक्त लाभ है।

उदाहरण:

>>> import nltk
>>> s = "The fox's foot grazed the sleeping dog, waking it."
>>> words = nltk.word_tokenize(s)
>>> words
['The', 'fox', "'s", 'foot', 'grazed', 'the', 'sleeping', 'dog', ',', 
'waking', 'it', '.']

यह आपको किसी भी विराम चिह्न को फ़िल्टर करने की अनुमति देता है जिसे आप नहीं चाहते हैं और केवल शब्दों का उपयोग करते हैं।

कृपया ध्यान दें कि string.split()यदि आप वाक्य के किसी भी जटिल हेरफेर को करने की योजना नहीं बनाते हैं, तो उपयोग करने वाले अन्य समाधान बेहतर हैं।

[संपादित]


5
split()व्हाइट-स्पेस पर विभाजक के रूप में निर्भर करता है, इसलिए यह हाइफन शब्दों को अलग करने में विफल होगा - और लंबे समय तक अलग-अलग वाक्यांश भी विभाजित करने में विफल होंगे। और अगर वाक्य में रिक्त स्थान के बिना कोई विराम चिह्न है, तो वे छड़ी करने में विफल रहेंगे। किसी भी वास्तविक विश्व पाठ पार्सिंग (इस टिप्पणी के लिए) की तरह, आपका nltk सुझाव विभाजन () `की तुलना में बहुत बेहतर है।
hobs

2
संभावित रूप से उपयोगी है, हालांकि मैं इसे "शब्दों" में विभाजित करने के रूप में नहीं दिखाऊंगा। किसी भी सादे अंग्रेजी परिभाषा के अनुसार, ','और "'s"शब्द नहीं हैं। आम तौर पर, यदि आप वाक्य-विचारणीय तरीके से ऊपर दिए गए वाक्य को "शब्दों" में विभाजित करना चाहते हैं, तो आप अल्पविराम को हटाकर "fox's"एक शब्द के रूप में प्राप्त करना चाहेंगे ।
मार्क एमी

1
अप्रैल 2016 के रूप में पायथन
2.7+

31

इस एल्गोरिथ्म के बारे में कैसे? व्हॉट्सएप पर स्प्लिट टेक्स्ट, फिर विराम चिह्न ट्रिम करें। यह सावधानीपूर्वक शब्दों के किनारे से विराम चिह्न को हटाता है, जैसे कि शब्दों के अंदर एपोस्ट्रोफ को नुकसान पहुंचाए बिना we're

>>> text
"'Oh, you can't help that,' said the Cat: 'we're all mad here. I'm mad. You're mad.'"

>>> text.split()
["'Oh,", 'you', "can't", 'help', "that,'", 'said', 'the', 'Cat:', "'we're", 'all', 'mad', 'here.', "I'm", 'mad.', "You're", "mad.'"]

>>> import string
>>> [word.strip(string.punctuation) for word in text.split()]
['Oh', 'you', "can't", 'help', 'that', 'said', 'the', 'Cat', "we're", 'all', 'mad', 'here', "I'm", 'mad', "You're", 'mad']

4
अच्छा है, लेकिन कुछ अंग्रेजी शब्दों में वास्तव में अनुगामी विराम चिह्न शामिल हैं। उदाहरण के लिए, में अनुगामी डॉट्स e.g.और Mrs., और अधिकार में अनुगामी apostrophe frogs'(के रूप में frogs' legs) शब्द का हिस्सा हैं, लेकिन इस एल्गोरिथ्म द्वारा छीन लिया जाएगा। हैंडलिंग संक्षिप्त रूपों को सही ढंग से किया जा सकता है मोटे तौर पर डॉट अलग initialisms का पता लगाने के साथ साथ विशेष मामलों (जैसे की एक शब्दकोश का उपयोग करके प्राप्त Mr., Mrs.)। एकल उद्धरणों से संबंधित अपोस्ट्रोफ़्स को भेद करना नाटकीय रूप से कठिन है, क्योंकि इसमें उस वाक्य के व्याकरण को पार्स करने की आवश्यकता होती है जिसमें शब्द निहित होता है।
मार्क अमेरी

2
@MarkAmery तुम सही हो। यह मेरे लिए भी हुआ है कि कुछ विराम चिह्नों - जैसे कि em डैश - रिक्त स्थान के बिना शब्दों को अलग कर सकते हैं।
कर्नल पैनिक

16

मैं चाहता हूं कि मेरे अजगर एक वाक्य को विभाजित करें (इनपुट) और प्रत्येक शब्द को एक सूची में संग्रहीत करें

str().split()विधि यह करता है, यह एक स्ट्रिंग लेता है, एक सूची में विभाजन:

>>> the_string = "this is a sentence"
>>> words = the_string.split(" ")
>>> print(words)
['this', 'is', 'a', 'sentence']
>>> type(words)
<type 'list'> # or <class 'list'> in Python 3.0

आपके द्वारा लिखी गई समस्या एक टाइपो के कारण है, आपने print(words)इसके बजाय लिखा है print(word):

wordचर का नामकरण current_word, यह वही है जो आपके पास था:

def split_line(text):
    words = text.split()
    for current_word in words:
        print(words)

..जब आपको करना चाहिए था:

def split_line(text):
    words = text.split()
    for current_word in words:
        print(current_word)

यदि किसी कारण से आप मैन्युअल रूप से लूप के लिए एक सूची बनाना चाहते हैं, तो आप सूची append()विधि का उपयोग करेंगे , शायद इसलिए कि आप सभी शब्दों को कम करना चाहते हैं (उदाहरण के लिए):

my_list = [] # make empty list
for current_word in words:
    my_list.append(current_word.lower())

या सूची-समझ का उपयोग करते हुए थोड़ा अधिक खाने वाला :

my_list = [current_word.lower() for current_word in words]

12

शलेक्स का एक .split()फंक्शन है। यह इस बात से अलग str.split()है कि यह उद्धरणों को संरक्षित नहीं करता है और एक उद्धृत वाक्यांश को एक शब्द के रूप में मानता है:

>>> import shlex
>>> shlex.split("sudo echo 'foo && bar'")
['sudo', 'echo', 'foo && bar']

10

यदि आप किसी सूची में किसी शब्द / वाक्य के सभी वर्ण चाहते हैं , तो यह करें:

print(list("word"))
#  ['w', 'o', 'r', 'd']


print(list("some sentence"))
#  ['s', 'o', 'm', 'e', ' ', 's', 'e', 'n', 't', 'e', 'n', 'c', 'e']

4

मुझे लगता है कि आप एक टाइपो के कारण भ्रमित हैं।

बदलें print(words)के साथ print(word)अपने पाश अंदर हर शब्द एक अलग लाइन पर छपी है,

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.