我正在做一个停用词代码,用于数据清理。我在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();
}
}
}
当我运行我的时,它只会这样做:
我该怎么办?
答案 0 :(得分:1)
您的代码存在3个问题:
因此,您正在最内层循环中增加错误的变量
导致无限循环,因为j
总是小于该值
s.length
,而您永远不会增加j
。更改此行:
for (int j = 0; j < s.length; i++) {
到
for (int j = 0; j < s.length; j++) {
要打印不是停用词的单词,您需要取反if
条件如下:
if (!sw.contains(s[j].trim().toLowerCase()))
还请确保文件stopwords.txt
用\n
分隔(新
行),因为您是基于此拆分而不是像
您共享的链接中的文件。
我建议您缩进代码,并使用有意义的名称来命名变量。这样的调试问题会简单得多。