2010-07-05 84 views
3

我有一个停止词列表,其中包含大约30个词和一组文章。在java中删除停用词

我想解析每篇文章并从中删除这些停用词。

我不确定什么是最有效的方法来做到这一点。

例如我可以通过停止列表循环,并替换文章中的单词,如果存在与空白,但它看起来不太好。

感谢

回答

4
  • 认沽停止词为java.util.Set
  • 拆分输入单词
  • 对于输入的每个单词,看其是否包含在集合停止字,如果不是
  • 写入到输出
+0

谢谢 我应该使用一个数组来存储输入吗? – Elham 2010-07-05 23:02:55

+0

@Elham:这是一个选项。如果输入非常大,可以通过使用扫描仪一次读取一个字来避免将其完全保存在内存中(可能还有两次)。 – 2010-07-06 07:58:25

1

替换单词将是低效的。你最好的选择是逐字解析文章,并将每个单词复制到一个新的StringBuffer;除非它是一个停用词,在这种情况下,你可以随意复制任何你想要的东西。这里StringBuffer比String更加高效。

如果仅存在三十个左右,那么如何存储停用词可能并不重要。一套可能是一个很好的选择。

0

根据Sun Java Tutorials,您可以在正则表达式中使用Perl兼容的\b删除器。如果你用他们来包围这个单词,它将只匹配那个单词,不管它是跟在后面还是用一个标点符号或空格作为前缀。

0

从输入中读取一个单词,并将其复制到您的StringBuilder(或放置结果的任何地方)当且仅当它不在停用词列表中。如果将停用词放入类似HashTable的东西,您将能够更快地搜索它们。

编辑:oops,不知道我在想什么,但你想要一个集合,而不是一个HashTable(或任何其他字典)。