from itertools import chain
from collections import Counter
from nltk.tokenize import sent_tokenize, word_tokenize
text = "This is an example text. Let us use two sentences, so that it is more logical."
wordlist = list(chain(*[word_tokenize(s) for s in sent_tokenize(text)]))
print(Counter(wordlist))
# Counter({'.': 2, 'is': 2, 'us': 1, 'more': 1, ',': 1, 'sentences': 1, 'so': 1, 'This': 1, 'an': 1, 'two': 1, 'it': 1, 'example': 1, 'text': 1, 'logical': 1, 'Let': 1, 'that': 1, 'use': 1})
我会使用以下方法之一:
1)如果单词不包含空格,但文本包含空格,则使用
那么你的单词应该在每一块中最多出现一次,并且要正确计数。例如,如果您想在“Baden-Baden”中数两次“Baden”,则此操作失败。在
2)使用字符串方法'find'不仅可以得到单词是否在那里,还可以得到它在哪里。数一数,然后从那一点继续搜索。 文本.查找(word)返回位置或-1。在
我的理解是,你想让单词一直读下去,这样当你遇到一个新单词时,你就可以发现。可以吗?最简单的解决方案是使用集合,因为它会自动删除重复项。例如:
另一方面,如果您需要每个单词的确切出现次数(在数学中称为“直方图”),则必须用字典替换该集合:
^{2}$注意:在这两个解决方案中,我假设文本包含一个iterable结构的单词。正如其他评论所说,
str.split()
对此并不完全安全。在既然我们已经确定了你想要达到的目标,我可以给你一个答案。现在你要做的第一件事就是把文本转换成单词列表。虽然
split
方法看起来似乎是一个好的解决方案,但当句子以一个单词结尾,后跟一个句号、逗号或任何其他字符时,它将在实际计数中造成问题。所以这个问题的一个好的解决方案是NLTK。假设您的文本存储在一个名为text
的变量中。您要查找的代码如下所示:相关问题 更多 >
编程相关推荐