我如何分割一个句子并将每个单词存储在一个列表中?例如,给定一个像“these are words”这样的字符串,我如何得到一个像["these", "are", "words"]这样的列表?


若要拆分其他分隔符,请参见在python中使用分隔符拆分字符串。

若要拆分为单个字符,请参见如何将字符串拆分为字符列表?。


当前回答

如果你想要一个列表中一个单词/句子的所有字符,可以这样做:

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


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

其他回答

给定一个字符串句子,它将每个单词存储在一个名为words的列表中:

words = sentence.split()

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

Shlex有一个.split()函数。它与str.split()的不同之处在于它不保留引号,将引用的短语视为单个单词:

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

注意:它适用于类unix的命令行字符串。它不适用于自然语言处理。

我希望我的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

根据你对句子列表的计划,你可能想看看自然语言工具包。它主要处理文本处理和计算。你也可以用它来解决你的问题:

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()的其他解决方案会更好。

(编辑)