python - كيفية تقسيم سلسلة إلى قائمة؟





list split text-segmentation (8)


ماذا عن هذه الخوارزمية؟ تقسيم النص على مسافة بيضاء ، ثم تقليم علامات الترقيم. هذا يزيل بعناية علامات الترقيم من حافة الكلمات ، دون الإضرار apostrophes داخل الكلمات مثل 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']

أريد وظيفة بيثون لتقسيم جملة (إدخال) وتخزين كل كلمة في قائمة. الشفرة التي قمت بكتابتها حتى الآن تقسم الجملة ، لكنها لا تخزن الكلمات كقائمة. كيف يمكنني فعل ذلك؟

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() يقوم بذلك ، ويأخذ سلسلة ، وينقسم إلى قائمة:

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

إذا كنت ترغب في إنشاء قائمة يدويًا في حلقة for لسبب ما ، append() طريقة append() القائمة ، ربما لأنك ترغب في تقليل كل الكلمات (على سبيل المثال):

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

أو أكثر إتقانا قليلا ، وذلك باستخدام list-comprehension :

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



أعتقد أنك مرتبك بسبب خطأ مطبعي.

استبدل print(words) print(word) داخل الحلقة حتى تتم طباعة كل كلمة على سطر مختلف




text.split()

يجب أن يكون هذا كافيًا لتخزين كل كلمة في قائمة. words هي بالفعل قائمة الكلمات من الجملة ، لذلك ليس هناك حاجة للحلقة.

ثانيًا ، قد يكون خطأً مطبعيًا ، لكنك تعانق حلقة صغيرة. إذا كنت تريد حقًا استخدام التذييل ، فسيكون:

words.append(word)

ليس

word.append(words)



يحتوي .split() وظيفة .split() . وهو يختلف عن str.split() في أنه لا يحافظ على علامات الاقتباس ويتعامل مع عبارة مقتبسة ككلمة واحدة:

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



اعتمادا على ما تنوي القيام به مع الجملة الخاصة بك ، كقائمة ، قد ترغب في إلقاء نظرة على اللغة الطبيعية Took Kit . انها تتعامل بشكل كبير مع معالجة النصوص والتقييم. يمكنك أيضًا استخدامه لحل مشكلتك:

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() أفضل إذا كنت لا تخطط للقيام بأي تلاعب معقد للحمولة.




يُقسِّم text في text على أي تدرجات متتالية للمسافات البيضاء.

words = text.split()      

تقسيم السلسلة في text على محدد: "," .

words = text.split(",")   

سوف تكون الكلمات المتغيرة list وتحتوي على الكلمات من تقسيم text على المحدد.




لأولئك القادمين من لغة أخرى مثلي ، ربما مع حلقة بسيطة يسهل فهمها واستخدامها:

mylist = ["foo", "bar", "baz", "bar"]
newlist = enumerate(mylist)
for index, item in newlist:
  if item == "bar":
    print(index, item)

أنا ممتن لذلك ماذا بالضبط تعداد تفعل؟ . لقد ساعدني ذلك على الفهم





python list split text-segmentation