gpt4 book ai didi

java - 如何使用 JSOUP 获取文本与给定单词列表中的大多数单词匹配的特定标签?

转载 作者:行者123 更新时间:2023-12-02 05:59:00 25 4
gpt4 key购买 nike

我正在尝试获取与给定单词列表中匹配的最大单词数的整个标签!。例如:考虑 html:

<div id="productTitle" class="a-size-large">Hello world, good morning, have a happy day</div> <div id="productTitle2" class="a-size-large">Hello people of this planet!.</div>

考虑使用 jsoup lib 的 java 代码:

String html = "<div id="productTitle" class="a-size-large">Hello world, good morning, have a happy day</div> <div id="productTitle2" class="a-size-large">Hello people of this planet!.</div>";
Document doc = Jsoup.parse(html);
List<String> words = new ArrayList<>(Arrays.asList("hello", "world", "morning"));
Element elmnt = doc.select("*:matchesOwn("+words+")");
System.out.println(elmnt.cssSelector());

预期输出:#产品标题

最佳答案

不幸的是,没有这样的选择器。您可以创建一个小算法来代替:

使用 Document.getAllElements() 获取文档中所有元素的列表。要获取元素的实际文本,请使用 Element.ownText()。现在您可以将该文本拆分为单词并计算所有单词的数量:

String html = "<div id=\"productTitle\" class=\"a-size-large\">Hello world, good morning, have a happy day</div> <div id=\"productTitle2\" class=\"a-size-large\">Hello people of this planet!.</div>";
Document doc = Jsoup.parse(html);
List<String> words = Arrays.asList("hello", "world", "morning");

Element elmnt = doc.getAllElements().stream()
.collect(Collectors.toMap(e -> countWords(words, e.ownText()), Function.identity(), (e0, e1) -> e1, TreeMap::new))
.lastEntry().getValue();

这使用 Java Streams 和 TreeMap 将单词数映射到元素。如果两个或多个元素具有相同数量的单词,则使用最后一个元素。如果您喜欢使用第一个,您可以使用 (e0, e1) -> e0

要计算列表中给出的单词数,您还可以使用 Java Streams。您可以使用这样的方法:

private long countWords(List<String> words, String text) {
return Arrays.stream(text.split("[^\\w]+"))
.map(String::toLowerCase)
.filter(words::contains)
.count();
}

这会将文本拆分为所有非单词字符。您可以更改它以满足您的需要。

您共享的 HTML 代码的 elmnt.cssSelector() 结果将是 #productTitle

关于java - 如何使用 JSOUP 获取文本与给定单词列表中的大多数单词匹配的特定标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55990437/

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