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





list split text-segmentation (8)


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

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(words) लिखा है:

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())

एक list-comprehension का उपयोग करते हुए, थोड़ा सा neater:

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

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

def split_line(text):

    # split the text
    words = text.split()

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

        # print the word
        print(word)



str.split()

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

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



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

words = text.split()      

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

words = text.split(",")   

शब्द चर एक list होगी और डेलीमीटर पर text विभाजन से शब्द शामिल होंगे।




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

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() का उपयोग करने वाले अन्य समाधान बेहतर हैं यदि आप string.split() किसी भी जटिल हेरफेर करने की योजना नहीं बनाते हैं।




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

>>> 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']



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

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



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

print(word) को अपने लूप के अंदर print(words) साथ बदलें ताकि प्रत्येक शब्द एक अलग पंक्ति पर मुद्रित हो




कोड:

def split_list(the_list, chunk_size):
    result_list = []
    while the_list:
        result_list.append(the_list[:chunk_size])
        the_list = the_list[chunk_size:]
    return result_list

a_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

print split_list(a_list, 3)

परिणाम:

[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10]]




python list split text-segmentation