2

我想计算文本中的唯一单词,但我想确保后跟特殊字符的单词不会被区别对待,并且评估不区分大小写。

举这个例子

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。问题是那个“男孩”。和“男孩”的评价不同,因为标点符号。

4

4 回答 4

2
import re
print len(re.findall('\w+', text))

使用正则表达式使这变得非常简单。您需要记住的是确保所有字符都是小写的,最后使用set组合结果以确保没有重复项。

print len(set(re.findall('\w+', text.lower())))
于 2013-04-16T23:20:27.107 回答
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'])
于 2013-04-16T23:18:43.367 回答
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。

于 2013-04-17T01:01:44.193 回答
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)
于 2013-04-16T23:30:26.707 回答