使用常规表达式在网页中查找重复的单词(毫无头绪)

时间:2018-09-19 00:19:25

标签: java php regex

我正在尝试找到一种使用正则表达式在网页上查找重复单词的方法,我一无所知,如果使用不正确的术语,请提前道歉。

到目前为止,我发现以下正则表达式非常有效,但仅适用于连续的单词(例如,hello hello),但不适用于放置在网页不同部分或由另一个单词分隔的单词(例如,hello food hello) )

\b(\w+)(\s+\1\b)*

\b(\w+(?:\s*\w*))\s+\1\b

我将非常感谢能为您提供帮助的任何人,因为我基本上是个菜鸟,所以我意识到自己可能不在正确的位置。

2 个答案:

答案 0 :(得分:0)

捕获组中的第一个单词(由单词边界包围),然后在之间重复可选字符后,在超前查找中对其进行反向引用:

\b(\w+)\b(?=.*\b\1\b)

https://regex101.com/r/TcS1UW/3

答案 1 :(得分:0)

我将使用Jsoup从网页获取文本。然后,您可以使用HashMap跟踪计数,然后在地图上搜索所需的任意次数:

    String url = "https://en.wikipedia.org/wiki/Jsoup";

    String body = Jsoup.connect(url).get().body().text();

    Map<String,Integer> counts = new HashMap<>();

    for ( String word : body.split(" ") )
    {
        counts.merge(word, 1, Integer::sum);
    }
    for ( String key : counts.keySet() )
    {
        if ( counts.get(key) >= 2 )
        {
            System.out.println(key + " occurs " + counts.get(key) + " times.");
        }
    }

您可能需要清理地图以清除一些不是单词的条目,但这将为您提供大部分帮助。