作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试查找特定单词或复合词在文本中的出现情况。
例如,文字是“祝你生日快乐”我必须匹配的短语是“生日快乐”。
我有一个需要与输入文本匹配的单词/短语字典。这本词典由大约 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/
我是一名优秀的程序员,十分优秀!