我想计算文本中的唯一单词,但我想确保后跟特殊字符的单词不会被区别对待,并且评估不区分大小写。
举这个例子
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。问题是那个“男孩”。和“男孩”的评价不同,因为标点符号。
你可以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'])
我认为你有使用 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。
首先,您需要获取单词列表。您可以按照 eandersson 的建议使用正则表达式:
import re
words = re.findall('\w+', text)
现在,您想要获取唯一条目的数量。有几种方法可以做到这一点。一种方法是遍历单词列表并使用字典来跟踪您看到单词的次数:
cwords = {}
for word in words:
try:
cwords[word] += 1
except KeyError:
cwords[word] = 1
现在,最后,您可以通过以下方式获得唯一词的数量
len(cwords)