【问题标题】:Word counts in Python using regular expression使用正则表达式在 Python 中计算字数
【发布时间】:2011-05-16 13:12:41
【问题描述】:

使用正则表达式计算文档中英文单词的正确方法是什么?

我试过了:

words=re.findall('\w+', open('text.txt').read().lower())
len(words)

但我似乎遗漏了几个字(与 gedit 中的字数相比)。 我做得对吗?

非常感谢!

【问题讨论】:

  • 我建议您尝试找出您错过了哪些单词。您应该能够改进您的正则表达式以包含此类单词。
  • 不应该是\\w+还是这是故意的?
  • @Constantinius: 可能应该是'\\w+'r'\w+' 要清楚,但\w 不是Python 字符串中已知的转义序列,所以'\w+' 被解释为文字反斜杠-w-plus。
  • 重新阅读这个问题。 “英语单词”,你说?您是否正在对照已知的“英语单词”词典进行验证?你会把那些从法语和其他语言借来的东西扔掉吗?
  • 感谢 cmets 的各位! @Johnsyweb 那是因为我的母语是中文,我应该只写“单词”:)

标签: python regex count word


【解决方案1】:

使用 \w+ 不会正确计算包含撇号或连字符的单词,例如“can't”将被计为 2 个单词。它还将计算数字(数字字符串); “12,345”和“6.7”将分别算作 2 个字(“12”和“345”、“6”和“7”)。

【讨论】:

  • 谢谢!我应该考虑一下:)它在python文档中说得很清楚......
  • 但是等等,这只会让我的人数减少而不是更多......:(
【解决方案2】:

这似乎按预期工作。

>>> import re
>>> words=re.findall('\w+', open('/usr/share/dict/words').read().lower())
>>> len(words)
234936
>>> 
bash-3.2$ wc /usr/share/dict/words
  234936  234936 2486813 /usr/share/dict/words

你为什么要小写你的单词?这与计数有什么关系?

我认为以下会更有效:

words=re.findall(r'\w+', open('/usr/share/dict/words').read())

【讨论】:

  • 是的,这完全没有必要。我刚刚从一个程序中获得了这段代码,该程序在文档中查找最常用的单词,他们使用它以便将“Hello”和“hello”视为同一个单词。
  • @Zhe:小写不会对这段代码产生影响。如果您想计算 unique 单词的数量,那么它会有所作为。我建议为此使用set
猜你喜欢
  • 1970-01-01
  • 2011-06-03
  • 2019-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-13
相关资源
最近更新 更多