gpt4 book ai didi

java - 在 Java 中实现邻近文本搜索

转载 作者:行者123 更新时间:2023-11-30 08:23:28 26 4
gpt4 key购买 nike

我正在寻找一种在 java 中实现邻近搜索的简单方法。

Proximity search 我的意思是 Lucene 是如何定义它的:

Lucene supports finding words are a within a specific distance away. To do a proximity search use the tilde, "~", symbol at the end of a Phrase. For example to search for a "apache" and "jakarta" within 10 words of each other in a document use the search:

"jakarta apache"~10

更具体地说:作为开始,我想实现以下形式的方法:

public static boolean proximityMatches(String txt, String term1, String term2, int wordDistance) {


// for the inputs:
// txt= "this is a really foo barred world", term1="foo", term2="world", wordDistance=4
// return true

// for the inputs:
// txt= "this is a really foo barred world", term1="this", term2="bar", wordDistance=1
// return false

}

注意事项:

  1. 我知道如何编写一个函数来满足我在那里提出的要求——我正在寻找的是一个公认的标准方法来实现它。

谢谢。

最佳答案

如果有公认的标准方法可以做到这一点,那就是使用 Lucene。您可以使用 一些正则表达式技巧,例如 RegexBuddy 库中的这个技巧(其中 word1word2 是搜索词的占位符,而3 in {1,3}? 是最大距离):

\b(?:word1(?:\W+\w+){1,3}?\W+word2|word2(?:\W+\w+){1,3}?\W+word1)\b

问题是,这依赖于一个关于单词构成的极其简单、武断的概念。它不匹配缩写或带连字符的单词,但它确实匹配其中包含数字和下划线的“单词”。您可以调整正则表达式来处理这些问题,但会弹出更多内容来替换它们。尽管它已经很丑陋,但每次调整都会使正则表达式的可读性大大降低,维护起来也更加困难。

这仅仅触及了全文搜索引擎可以帮助您避免的问题的皮毛。如果您有一个非常具体、严格约束的任务要完成,正则表达式或其他“语法级”工具可能适合。但是,如果您需要在语义层面上工作,识别自然语言单词和短语,您需要一个搜索引擎或其他专用工具。

关于java - 在 Java 中实现邻近文本搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23648558/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com