我正在编写一个用于数据清理的停止字代码。我按照 YouTube 上的教程进行操作:https://www.youtube.com/watch?v=ckQUlI7x7hI他的代码可以工作并显示输出,但我的不行

我正在使用英语停用词,我的停用词的示例是“a”、“an”、“away”、“keeps”。输入为“每天一苹果,医生远离我”,输出应为“苹果日医生”。

这是我的文件的内容:https://ufile.io/gikev

代码如下:

import java.io.FileInputStream; 
import java.util.ArrayList; 
 
public class DataCleaning { 
 
 
public static void main(String[] args) { 
 
    ArrayList sw = new ArrayList<>(); 
 
    try{ 
        FileInputStream x = new FileInputStream("/Users/Dan/Desktop/DATA/stopwords.txt"); 
 
        byte b[] = new byte[x.available()]; 
        x.read(b); 
            x.close(); 
 
            String data[] = new String(b).split("\n"); 
 
        for(int i = 0; i < data.length; i++) 
        { 
            sw.add(data[i].trim()); 
        } 
         FileInputStream xx = new FileInputStream("/Users/Dan/Desktop/DATA/cleandata.txt"); 
 
        byte bb[] = new byte[xx.available()]; 
        xx.read(bb); 
            xx.close(); 
 
            String dataa[] = new String(bb).split("\n"); 
 
 
 
            for(int i = 0; i < dataa.length; i++) 
 
        { 
            String file = ""; 
            String s[] = dataa[i].split("\\s"); 
            for(int j = 0; j < s.length; i++) 
            { 
                if(sw.contains(s[j].trim().toLowerCase())) 
                { 
                    file=file + s[j] + " "; 
                } 
 
            } 
            System.out.println(file + "\n"); 
        } 
 
    } catch(Exception a){ 
        a.printStackTrace(); 
    } 
 
   } 
 
 } 

当我运行我的时,它只会执行以下操作:

我该怎么办?

请您参考如下方法:

您的代码存在 3 个问题:

  1. 您在最内层循环中增加了错误的变量
    导致无限循环,因为 j 始终小于
    s.length 并且您永远不会增加j。更改此行:

    for (int j = 0; j < s.length; i++) { 
    

    for (int j = 0; j < s.length; j++) { 
    
  2. 要打印非停用词的单词,您需要否定您的if 条件如下:

    if (!sw.contains(s[j].trim().toLowerCase())) 
    
  3. 此外,请确保文件 stopwords.txt\n 分隔(new 线),因为你是根据它来分割它的,而不是像 文件位于您共享的链接中。

我建议您缩进代码并使用有意义的名称来命名变量。调试这样的问题会简单得多。


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!