JSOUP寻找词组

时间:2011-12-09 21:16:17

标签: java html-parsing jsoup

对于家庭作业,我必须编写一个程序,从网站上废弃HTML,然后以某种方式在网站中找到短语。当我说短语时,我的意思是某种任意组织文本的方式,以便彼此非常接近的单词放在同一组中。我知道这听起来真的不太清楚,但作业说明我们如何做到这一点取决于我们对如何找到“短语”的解释。

目前我的代码如下:

Document doc = Jsoup.connect("http://oracle.com/").get();
String html = doc.body().toString();

System.out.println(html); 

在解析所有html时,这将为我提供在某些网页上显示的所有不同单词的正确打印输出。

我的主要问题是我想不出一种解析HTML的方法,这样我就能以某种方式将这些任意组合在一起(而且我不知道我可以用什么样的标准任意形成这些“组”的话)。

我知道这个问题听起来很糟糕,但我不知道我怎么说它,我真的不知道我能做些什么。我被赋予的任务非常不清楚,当被要求澄清时,我的教授只是告诉我自己解释。我想知道是否有人对如何解析html有任何想法,以便相互接近的词(可能在类似的html标签或其他内容)可以被过滤掉,类似于我现在的当前输出,除了可能在每个“短语之后“就像换行或者我可以解析的东西。

感谢您的任何想法或建议。

2 个答案:

答案 0 :(得分:1)

您正在寻找的是一个名为stemming的概念。来自维基百科

  

例如,英语的词干分析器应该识别字符串“cats”   (并且可能是“catlike”,“catty”等)基于根“cat”,和   “stemmer”,“stemming”,“stemmed”基于“stem”。一个词根   算法减少“钓鱼”,“钓鱼”,“鱼”和“渔民”等字样   根词,“鱼”。

你为此提供了一个简单的暴力实施。另请查看来自LuceneOpenNLP

的词干算法实现

答案 1 :(得分:0)

既然你的问题很不清楚,我的回答并不完美。事实上,这更像是一个建议,而不是答案,因为评论可能不会那么大。

这是一个基于以下短语定义的想法 - When I say phrases I mean some sort of arbitrary way of organizing text so that words that are in close proximity to each other are put in the same group

我认为你需要做的是从html“分离”不同的文本片段,尽可能从html中删除。不可能有百分之百肯定的方法来实现这一目标,因为html本身可能非常复杂,如果不可能,以这种方式解析它可能会变得非常困难。

这是我想到的一个建议 - 在html中找到连续的文本片段,其中没有标签。这可以通过简单的正则表达式轻松完成,如果你使用jsoup,你可以做这样的事情 -

String html = doc.body().toString();
Matcher m = Pattern.compile("([^<>]+)").matcher(html);
while(m.find()) {
    String text = f.group(1);
}

但是这可能并不总是起作用,因为一些间歇性的html装饰用于字体更改甚至粗体和斜体标记可以“打破”这些短语。所以你可能想要建立某种弹性来忽略这些事情。

或许您可以找到另一个文本的“标记距离”。这是在文本片段之间出现的html标签的计数数量,如果它们只是一个或者可能是2-3个标签,则可以考虑片段。

最后,您可以自由地投入一些自己的创造力来发展这种方法。 我想再次提一下,这只是建议您构建内容的建议。 一切顺利。