如何将字符串拆分为列表?

时间:2009-04-13 12:48:45

标签: python list split text-segmentation

我希望我的Python函数分割句子(输入)并将每个单词存储在列表中。我当前的代码拆分了句子,但没有将单词存储为列表。我该怎么做?

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)

10 个答案:

答案 0 :(得分:443)

text.split()

这足以将每个单词存储在列表中。 words已经是句子中单词的列表,因此不需要循环。

其次,它可能是一个错字,但你的循环有点搞砸了。如果你确实想要使用append,那就是:

words.append(word)

不是

word.append(words)

答案 1 :(得分:418)

在任何连续的空格运行中拆分text中的字符串。

words = text.split()      

在分隔符text上的","中拆分字符串。

words = text.split(",")   

单词变量将为list并包含分隔符上text分割的单词。

答案 2 :(得分:80)

str.split()

  

使用sep作为分隔符,在字符串中返回单词列表   ...如果未指定sep或为None,则应用不同的拆分算法:连续空格的运行被视为单个分隔符,如果字符串具有前导或尾随,则结果将在开头或结尾处不包含空字符串空白。

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

答案 3 :(得分:51)

根据您计划对列表中的句子执行的操作,您可能需要查看Natural Language 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()的其他解决方案会更好。

[被修改]

答案 4 :(得分:26)

这个算法怎么样?在空格上拆分文本,然后修剪标点符号。这样就可以小心地删除单词边缘的标点符号,而不会损害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']

答案 5 :(得分:15)

  

我希望我的python函数分割句子(输入)并将每个单词存储在列表中

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循环中手动构建一个列表,你可以使用list 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]

答案 6 :(得分:11)

shlex具有.split()功能。它与str.split()的不同之处在于它不保留引号并将引用的词组视为单个词:

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

答案 7 :(得分:4)

我认为你因为拼写错误而感到困惑。

print(words)替换为循环中的print(word),以便将每个字打印在不同的行上

答案 8 :(得分:4)

如果要在列表中包含单词/句子的所有字符,请执行以下操作:

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


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

答案 9 :(得分:1)

在不损害单词内撇号的情况下拆分单词 请找出 input_1 和 input_2 摩尔定律

def split_into_words(line):
    import re
    word_regex_improved = r"(\w[\w']*\w|\w)"
    word_matcher = re.compile(word_regex_improved)
    return word_matcher.findall(line)

#Example 1

input_1 = "computational power (see Moore's law) and "
split_into_words(input_1)

# output 
['computational', 'power', 'see', "Moore's", 'law', 'and']

#Example 2

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

split_into_words(input_2)
#output
['Oh',
 'you',
 "can't",
 'help',
 'that',
 'said',
 'the',
 'Cat',
 "we're",
 'all',
 'mad',
 'here',
 "I'm",
 'mad',
 "You're",
 'mad']