【问题标题】:I don't want to remove stop words by splitting words into letters [closed]我不想通过将单词拆分为字母来删除停用词[关闭]
【发布时间】:2020-10-13 15:01:35
【问题描述】:

我正在编写这段代码来从我的文本中删除停用词。

问题 - 此代码非常适合删除停用词,但是当我的文本中出现像 ant、ide 这样的词时,问题就出现了,因为它删除了 ant 和 ide 这两个词,因为 ant 存在于 important、want 和 ide 中在里面。但我不想将单词拆分成一个字母来删除停用词。

            String sCurrentLine;
            List<String> stopWordsofwordnet=new ArrayList<>();
            FileReader fr=new FileReader("G:\\stopwords.txt");
            BufferedReader br= new BufferedReader(fr);
                while ((sCurrentLine = br.readLine()) != null)
                {
                    stopWordsofwordnet.add(sCurrentLine);
                }
                //out.println("<br>"+stopWordsofwordnet);
            List<String> wordsList = new ArrayList<>();
            
            String text = request.getParameter("textblock");
            text=text.trim().replaceAll("[\\s,;]+", " ");
            String[] words = text.split(" ");

//            wordsList.addAll(Arrays.asList(words));
                for (String word : words) {
                wordsList.add(word);
                }
            out.println("<br>");

            //remove stop words here from the temp list
            for (int i = 0; i < wordsList.size(); i++) 
            {
            // get the item as string
            for (int j = 0; j < stopWordsofwordnet.size(); j++) 
            {
            if (stopWordsofwordnet.get(j).contains(wordsList.get(i).toLowerCase())) 
            {
                out.println(wordsList.get(i)+"&nbsp;");
                wordsList.remove(i);
                i--;
                break;
            }
            }
            }
            out.println("<br>");
            for (String str : wordsList) {
            out.print(str+" ");
            }

【问题讨论】:

  • 如果你不想停用词"ant" 删除词"want",你为什么使用contains()
  • okayyy.. 那我该怎么写呢?请告诉
  • equals替换contains
  • 好的..谢谢你的帮助

标签: java servlets nlp stanford-nlp


【解决方案1】:

您的代码过于复杂,可以简化为:

// Load stop words from file
Set<String> stopWords = new TreeSet<>(String.CASE_INSENSITIVE_ORDER);
stopWords.addAll(Files.readAllLines(Paths.get("G:\\stopwords.txt")));

// Get text and split into words
String text = request.getParameter("textblock");
List<String> wordsList = new ArrayList<>(Arrays.asList(
        text.replaceAll("[\\s,;]+", " ").trim().split(" ")));

// Remove stop words from list of words
wordsList.removeAll(stopWords);

【讨论】:

  • 我尝试了您的代码,但即使在编写导入语句之后,TreeSet 也出现错误。
  • @SnehilRSingh import java.nio.file.*; import java.util.*; --- 在不知道您遇到什么错误的情况下,我无能为力。
  • 是的,我编写了相同的导入语句,但仍然在 TreeSet 下得到一条红线,但代码运行良好,重新启动 Netbeans 对我有帮助(奇怪)。感谢您的帮助@Andreas。
  • 你能帮我用java识别文本中的俚语吗?
  • @SnehilRSingh 如果您需要这方面的帮助,您应该创建一个新问题,首先在网络上进行研究以查看是否已经有可用的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-22
  • 1970-01-01
  • 2021-01-17
  • 2010-12-04
  • 1970-01-01
相关资源
最近更新 更多