我正在编写一些Java代码,以便使用Wikipedia在文本上实现NLP任务。如何使用JSoup提取维基百科文章的第一段?
非常感谢。
答案 0 :(得分:8)
这非常简单,每个半结构化页面的过程都非常相似。
首先,您必须唯一标识所需信息所在的 DOM元素。最简单的方法是使用Web开发工具,例如Firefox中的Firebug或者与IE捆绑在一起的(我认为> 6)和Chrome。
使用文章 Potato 作为示例,您会发现您感兴趣的<p>
aragraph位于以下块中:
<div class="mw-content-ltr" lang="en" dir="ltr">
<div class="metadata topicon" id="protected-icon" style="display: none; right: 55px;">[...]</div>
<div class="dablink">[...]</div>
<div class="dablink">[...]</div>
<div>[...]</div>
<p>The potato [...]</p>
<p>[...]</p>
<p>[...]</p>
换句话说,您希望找到<p>
内的第一个div
元素,其中class
名为mw-content-ltr
。
然后,您只需要使用jsoup选择该元素,例如使用其选择器语法(这与jQuery非常相似):
public class WikipediaParser {
private final String baseUrl;
public WikipediaParser(String lang) {
this.baseUrl = String.format("http://%s.wikipedia.org/wiki/", lang);
}
public String fetchFirstParagraph(String article) throws IOException {
String url = baseUrl + article;
Document doc = Jsoup.connect(url).get();
Elements paragraphs = doc.select(".mw-content-ltr p");
Element firstParagraph = paragraphs.first();
return firstParagraph.text();
}
public static void main(String[] args) throws IOException {
WikipediaParser parser = new WikipediaParser("en");
String firstParagraph = parser.fetchFirstParagraph("Potato");
System.out.println(firstParagraph); // prints "The potato is a starchy [...]."
}
}
答案 1 :(得分:2)
看起来第一段也是文档中的第一个<p>
块。所以这可能有用:
Document doc = Jsoup.connect("http://en.wikipedia.org/wiki/B-tree").get();
Elements paragraphs = doc.select("p");
Element firstParagraph = paragraphs.first();
现在您可以获取此元素的内容
答案 2 :(得分:1)
席尔瓦提出的解决方案适用于大多数情况,例如“JavaScript”和“United States”。段落应选择为doc.select(“。mw-body-content p”);
检查this GitHub 代码以获取更多详细信息。您还可以从HTML中删除一些元数据信息以提高准确性。