【问题标题】:What is the cause of discrepancies among different word counters不同字数计数器出现差异的原因是什么
【发布时间】:2024-01-18 06:26:01
【问题描述】:

我在 Ruby 中创建了一个单词计数器,作为学习 Ruby 的一个小练习。

我在 JavaScriptKit.com 和 WordCountTool.com 以及 Open Office Writer 中使用过单词计数器。

一些文本产生了以下结果

OpenOffice: 458 words
JavaScriptKit: 453 words
WordCountTool: 455 words
Mine: 461 words

我的问题是:为什么所有计数器的相同摘录的计数不同?

脚本中有哪些问题可能导致计数不准确但仍接近计数?

有哪些方法可以改进我的脚本以使其更准确?

【问题讨论】:

  • 你能发布一个给出不同计数的示例文本吗?我猜这可能来自微小的差异,例如连字符的单词是否计为一个或两个,以及它如何处理某些缩写 s.a.这个。
  • 我认为这基本上是由于一些小错误,比如 - 有些程序在看到空格时会计算一个新单词,但这是不正确的,因为他们会看到类似“然后......我意识到" 并将 "then...i" 视为一个单词,或将连字符的单词视为一个单词。
  • 如果某些程序不能正确处理字符集问题,也可能会导致差异。你的文字是什么字符集?
  • @serabe,这不是关于特定代码的问题.. 而是导致脚本之间计数差异的真正原因——这些差异的原因是什么,如何避免“错误”等等。跨度>
  • @Melanie,对不起,我误解了你。

标签: ruby word-count


【解决方案1】:

您实际上是在询问“单词”的定义,出于计数目的,它可能意味着非常不同的东西。我们以您的原始帖子为例。

最简单的计数工具是

text.split.count                      #=> 111

如果你输入了"Why do the counts differ/change for the same[...]" 会怎样?好吧,显然“不同/改变”是两个词,所以我们应该将正斜杠算作单词分隔符。事实上,仅仅因为我忘记在句号和下一个单词之间放置一个空格,并不能使它们成为同一个单词,所以我们也将句号作为分隔符。不过我懒得去查是不是网址,所以你提到的那些网站就只能算两个字了:

text.split(/[\s\.\/\?]+/).count       #=> 113

好的,这很酷,但实际上数字在技术上并不是单词 - 如果说它们,458 将是“458”,实际上是 5 个单词。所以我们也打折吧

text.split(/[\s\.\/\?0-9]+/).count    #=> 109

你明白了。你得到的结果只相差 8 个词——很明显,他们对一个词的定义并没有那么不同。但是字数只是一个粗略的指导,所以不要担心差异。

【讨论】:

    【解决方案2】:

    您会得到不同的结果,具体取决于 WC 的作者所决定的“单词”。某些类型的标点符号可以归类为单词分隔符,具体取决于计数器以及空格、换行符等...

    来自 WC http://en.wikipedia.org/wiki/Word_count 的*文章中的一些信息

    不同的字数统计程序可能会给出不同的结果,具体取决于 关于“词”的定义

    【讨论】:

      最近更新 更多