我想计算文本中的唯一单词,但我想确保特殊字符后面的单词不会被区别对待,并且评估不区分大小写。
举个例子
text = "There is one handsome boy. The boy has now grown up. He is no longer a boy now."
print len(set(w.lower() for w in text.split()))
结果将是16,但我希望它会返回14.问题是'男孩'。由于标点符号,“男孩”的评价方式不同。
答案 0 :(得分:2)
import re
print len(re.findall('\w+', text))
使用regular expression使这非常简单。您需要记住的是确保所有字符都在lowercase中,最后使用set合并结果,以确保没有重复的项目。
print len(set(re.findall('\w+', text.lower())))
答案 1 :(得分:1)
您可以在此处使用regex
:
In [65]: text = "There is one handsome boy. The boy has now grown up. He is no longer a boy now."
In [66]: import re
In [68]: set(m.group(0).lower() for m in re.finditer(r"\w+",text))
Out[68]:
set(['grown',
'boy',
'he',
'now',
'longer',
'no',
'is',
'there',
'up',
'one',
'a',
'the',
'has',
'handsome'])
答案 2 :(得分:1)
我认为你有正确的想法使用Python内置集类型。 我认为如果您先删除'。'就可以完成。通过替换:
text = "There is one handsome boy. The boy has now grown up. He is no longer a boy now."
punc_char= ",.?!'"
for letter in text:
if letter == '"' or letter in punc_char:
text= text.replace(letter, '')
text= set(text.split())
len(text)
应该适合你。如果您需要任何其他标志或标点符号,您可以轻松 将它们添加到punc_char中它们将被过滤掉。
亚伯拉罕J。
答案 3 :(得分:0)
首先,您需要获取单词列表。您可以使用正则表达式作为eandersson建议:
import re
words = re.findall('\w+', text)
现在,您想获得唯一条目的数量。有几种方法可以做到这一点。一种方法是遍历单词列表并使用字典来跟踪您看到单词的次数:
cwords = {}
for word in words:
try:
cwords[word] += 1
except KeyError:
cwords[word] = 1
现在,最后,您可以通过
获取唯一单词的数量len(cwords)