这是一个面试问题,应该关注效率。如何计算大文本文件中指定词的出现?我只能想到大多数编程语言中的indexOf()方法,但我不认为这是正确的答案。计算大文本文件中特定词的出现次数
回答
你想要的是Boyer-Moore algorithm。这是解决这个问题的最有效的已知通用方法。
识别字发生的最好办法,而不是仅仅出现一个行的文件中的子串字符该序列,可能是从\bword\b
编译正则表达式Pattern
- 的\b
是“字边界”。
一旦你有了这个Pattern
没有直接的方法来计算一行中出现的次数,所以你需要一些基准来找出更快的 - split
(将结果数组的长度减去一个),但不可能,但可能,或者使用该模式的matcher
方法制作一个方法,然后在计数(我赌这个)或其他东西时循环其find
方法。但是单独检测字边界就足够了PITA,我倾向于总是使用正则表达式来处理任务;-)。
可以通过一次读取多条线(并计算单词出现次数)来挤压某些速度 - 比如一次一个MB。但是,如果你这样做,那么你必须关注兆字节中的最后一条“部分”线,因为这个词的出现可能会在该部分行的结尾与下一个吞咽的开始之间分裂 - 可行,但是这种优化只是在胁迫下进行的,因为它很容易引入错误;-)。
+1为您的答案好主意,但一些代码也会很好:D – ant 2010-04-20 11:41:58
如果文本文件非常大,indexOf()可能不是一个好主意,因为您需要将整个文件加载到一个字符串中并因此咀嚼内存。给定足够的数据,你会崩溃的程序。我认为你需要查看流读取API来读取块的文件,这些文件比indexOf()更实用。
使用buffered stream字符逐字符到数组读取文件,直到空白字符遇到或它们的组(空格,制表符,新的生产线,...),比较数组与目标词的内容,如果比赛增加计数器,清除数组,返回阅读。
预先分配足够大小的数组,然后重新使用它进行读取,如果需要的话进行扩展,不要在每次迭代时分配它。不要每次都清除数组,只需将其读取计数器设置为零即可。另外,您可以将字符的读取和将其与目标进行比较,并将其转换为单个循环,从而不再需要中间数组。第一个变体很容易转换成这个,只是抛出数组并且即时比较,您只需要知道当前字符及其在单词中的位置。
- 1. 计算在文本中出现特定单词的次数?
- 2. 计算txt文件中特定文本的出现次数
- 3. 如何计算MySQL BLOB文本中特定单词的出现次数?
- 4. 如何计算Ruby中文本文件中单词的出现次数
- 5. Perl - 为文件的每一行计算特定单词的出现次数
- 6. 计算文本文件中文字的出现次数
- 7. 计算单词在txt文件中出现的次数Java
- 8. Python:计算文件中某个单词出现的次数
- 9. 用C++计算文件中单词的出现次数
- 10. 如何计算Unix中一大组文件中每个词的出现次数?
- 11. Java:计算文本文件中字符的出现次数
- 12. 计算文本文件中字符串的出现次数
- 13. 如何加速计算大文件中单词的出现次数?
- 14. 计算文本文件中每个单词的出现
- 15. 计算单词的列表出现在文本文件中
- 16. 计算大文件中字符串的出现次数
- 17. 计算几个特定词的出现次数
- 18. 计算从C中的文本文件中出现的单词的出现次数
- 19. 列出文本文件中出现次数的所有单词?
- 20. 如何计算单词在文本文件中的次数
- 21. 从文件内容中删除停用词并计算词的出现次数
- 22. 从文本文件中计算特定单词 - Java
- 23. 比较两个文本文件并计算出现次数
- 24. 计算HTML文档中可见文本的出现次数
- 25. 用于计算文件中特定单词出现次数的命令行(如json中的键数)
- 26. 如何计算xml文件中某个特定属性的出现次数?
- 27. 计算多个文件中特定正则表达式的出现次数
- 28. 计算大文档中的每个字的出现次数
- 29. 计算R中某个数据帧行的特定词的出现次数
- 30. 使用脚本计算字符串在文本文件中出现的次数
是的,除非你提到过,否则我不记得这个算法。 – Sawyer 2010-04-20 08:14:55