c++ - 检查字符串是否包含英文句子

标签 c++ string linguistics

截至目前,我决定使用字典并遍历整个内容。每次我看到一个换行符,我都会创建一个包含从该换行符到下一个换行符的字符串,然后我执行 string.find() 以查看该英文单词是否在其中。这需要很长时间,每个单词大约需要 1/2-1/4 秒来验证。

它运行良好,但我需要每秒检查数千个单词。我可以运行多个窗口,这不会影响速度(多线程),但它仍然只能每秒检查 10 个。 (我需要几千)

我目前正在编写代码来预编译一个包含英语中每个单词的大型数组,这应该会加快很多速度,但仍然没有达到我想要的速度。 必须有更好的方法来做到这一点。

我正在检查的字符串将如下所示:

"hithisisastringthatmustbechecked"

但其中大部分包含完全垃圾,只是随机字母。

我无法检查不可能的字母组合,因为该字符串会因为“thatmust”之间的“tm”而被丢弃。

最佳答案

您可以使用 Knuth–Morris–Pratt (KMP) algorithm 来加快搜索速度.

遍历每个字典单词,然后build a search table for it .你只需要做一次。现在您搜索单个单词的速度会更快,因为“错误的开始”将被消除。

关于c++ - 检查字符串是否包含英文句子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18023005/

相关文章:

c++ - 如何保存帧缓冲区然后将其取回

javascript - 为什么 JSON.stringify 搞砸了我的日期时间对象?

python - 通过语法检查(Python)从一组可能性中选择最流畅的文本

c++ - 创建结构的二维数组会导致崩溃

c++ - 我可以取消引用std::string.end()吗?

java - Java 中的正则表达式 - 解析字符串数组

string - Julialang 中带有前导(左填充)零的数字到字符串

java - 如何从 Treebank 训练斯坦福 NLP 的新解析器模型?

PROLOG - 获取实体验证的所有规则的列表

c++ - 使用重复字符压缩字符串