这个问题已经在这里有了答案:

我想对文本中的唯一单词进行计数,但是我想确保后面没有特殊字符的单词不会受到不同对待,并且求值结果不区分大小写。

举个例子

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

===============>>#1 票数:2

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

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

print len(set(re.findall('\w+', text.lower())))

===============>>#2 票数: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'])

===============>>#3 票数: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。

===============>>#4 票数: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)

  ask by translate from so

未解决问题?本站智能推荐:

关注微信公众号