java - java中的停用词和词干分析器

标签 java nlp stop-words porter-stemmer

我正在考虑在我的相似性程序中放置一个停用词,然后是一个词干分析器(选择搬运工 1 或 2 取决于最容易实现的内容)

我想知道,因为我从文件中读取我的文本整行并将它们保存为一个长字符串,所以如果我有两个字符串 ex。

String one = "I decided buy something from the shop.";
String two = "Nevertheless I decidedly bought something from a shop.";

现在我得到了那些字符串

词干提取: 我可以直接在其上使用词干分析器算法,将其保存为字符串,然后像在程序中实现词干分析器之前一样继续处理相似性,比如运行 one.stem();之类的事情?

停用词: 这是怎么回事?哦 我只是使用吗? one.replaceall("我", "");还是有一些特定的方法可用于此过程?我想继续使用字符串并在使用相似性算法获得相似性之前获取一个字符串。维基就不多说了。

希望你能帮帮我!谢谢。

编辑:这是一个与学校相关的项目,我正在写一篇关于不同算法之间相似性的论文,所以我认为我不被允许使用 lucene 或其他为我工作的库。另外,在我开始使用像 Lucene 和 co 这样的库之前,我想尝试了解它是如何工作的。希望不要太麻烦^^

最佳答案

如果您出于学术原因不实现此功能,则应考虑使用 Lucene图书馆。无论哪种情况,它都可以作为引用。它具有用于标记化、停用词过滤、词干提取和相似性的类。下面是一个使用 Lucene 3.0 删除停用词并阻止输入字符串的简单示例:

public static String removeStopWordsAndStem(String input) throws IOException {
    Set<String> stopWords = new HashSet<String>();
    stopWords.add("a");
    stopWords.add("I");
    stopWords.add("the");

    TokenStream tokenStream = new StandardTokenizer(
            Version.LUCENE_30, new StringReader(input));
    tokenStream = new StopFilter(true, tokenStream, stopWords);
    tokenStream = new PorterStemFilter(tokenStream);

    StringBuilder sb = new StringBuilder();
    TermAttribute termAttr = tokenStream.getAttribute(TermAttribute.class);
    while (tokenStream.incrementToken()) {
        if (sb.length() > 0) {
            sb.append(" ");
        }
        sb.append(termAttr.term());
    }
    return sb.toString();
}

如果像这样用在你的字符串上:

public static void main(String[] args) throws IOException {
    String one = "I decided buy something from the shop.";
    String two = "Nevertheless I decidedly bought something from a shop.";
    System.out.println(removeStopWordsAndStem(one));
    System.out.println(removeStopWordsAndStem(two));
}

产生这个输出:

decid bui someth from shop
Nevertheless decidedli bought someth from shop

关于java - java中的停用词和词干分析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6122545/

相关文章:

java - 在访问器上方放置@Id 注释会导致创建元素集合表失败

java - 带有 AsyncTask 的 HttpURLConnection 太慢 (Android)

Java 8 流处理不流畅

java - 如何将斯坦福NLPCore 的带注释的输出保存到字符串中?

python - 对包含 B 或 I 标签的连续单词进行分组

SQL 词根匹配

sql-server - 全文搜索 : Noise words are being searched for

java - 尝试从另一个列表中删除项目列表时出现 UnsupportedOperationException

python - python中的停用词消除和词干分析器

apache-spark - pyspark:StopWordsRemover 参数区域设置给定的值无效