java - 如何找到文本中复合词的出现

标签 java string

我正在尝试查找特定单词或复合词在文本中的出现情况。

例如,文字是“祝你生日快乐” 我必须匹配的短语是“生日快乐”。

我有一个需要与输入文本匹配的单词/短语字典。这本词典由大约 3000 个单词/复合词组成。需要分析的文本数量可能会有所不同。现在我正在使用正则表达式。\b+phrase+\b.。这给了我正确的答案,但速度很慢。

此外,在文本中找到的单词可能会在前面或后面加上特殊字符,如 !、:、。等

虽然 text.contains() 速度很快,但我不能使用它,因为即使是单词的一个子集,它也会返回 true。有什么方法可以更快地做到这一点?

最佳答案

您可以将字符串拆分为单词数组并使用 Knuth-Morris-Pratt algorithm , 但不是比较字符串中的字符,而是比较数组中的单词。

例如字符串:

i bought a hat in manhattan

拆分成数组:

S = {"i","bought","a","hat","in","manhattan"}

如果您要查找单个单词,只需将您要查找的单词与此数组中的每个单词进行比较即可。

如果您要查找一系列单词,例如:

W = {"a","hat","in"}

使用 KMP。明确地,引用维基百科定义的算法,如上设置 S 和 W,当算法声明 if W[i] = S[m + i] 时,您可以通过以下方式在 java 中实现它:

if(W[i].equals(S[m+i]))

关于java - 如何找到文本中复合词的出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15875773/

相关文章:

java - 如何在java中让body保存iframe的内容

python - 根据名称(月)排序字符串列表

java - 从 JAVA 字符串中剥离/删除特定字符

python - 将字符串添加到字典中的所有键(Python)

java - 使用java代码运行oracle脚本

java - 将结果集数据放入文本文件的最佳方法是什么?

java - 通过公共(public)API导出non_public类型

java - 我已经在模拟器中编译了 Android 应用程序,现在该怎么办?

.net - 如何强制 .net String GetHashCode() 的 32 位

ruby - Camel-cased 方法名的英文句子