我正在使用一个带有三个for循环的简单代码来从Array List中获取句子,对它们进行标记,删除停用词并将其余部分存储在二维数组中。
SentenceList是ArrayList。
停用词是包含停用词列表的数组。
该程序旨在将每个句子删除停用词并将其余部分保存在数组中。 这是代码:
String[][] trim=new String[sentenceList.size()][largest];
StringTokenizer st1;
for(int i=0;i<sentenceList.size();i++)
{
st1= new StringTokenizer(sentenceList.get(i)," ,(){}[]/.;:'&?!");
int count=st1.countTokens();
for(int j=0;j<count;j++)
{
String token=st1.nextToken();
for(int k=0;k<stopwords.length;k++)
{
if(token.equals(stopwords[k]))
continue;
else
trim[i][j]=token;
}
}
}
//PRINT CHECK
for(int i=0;i<sentenceList.size();i++)
{
for(int j=0;j<largest;j++)
{
if(trim[i][j]!=null)
System.out.print(trim[i][j]+" ");
}
System.out.println();
令人困惑的元素是上面的内容不起作用,但是如果我交换了if和else部分它的工作方式,我只得到了停用词。
答案 0 :(得分:0)
如果我理解正确,这就是你需要的...... 问题是你在第3个for循环中添加了单词。您应该检查第3个循环中的条件,使用break退出到第2个循环,然后处理该单词(在这种情况下添加)。
String[][] trim=new String[sentenceList.size()][largest];
StringTokenizer st1;
boolean isStop;
for(int i=0;i<sentenceList.size();i++)
{
st1= new StringTokenizer(sentenceList.get(i)," ,(){}[]/.;:'&?!");
int count=st1.countTokens();
for(int j=0;j<count;j++)
{
isStop = false;
String token=st1.nextToken();
for(int k=0;k<stopwords.length;k++)
{
if(token.equals(stopwords[k])) {
isStop = true;
break;
}
}
if(isStop)
continue;
else {
trim[i][j]=token;
}
}
}
//PRINT CHECK
for(int i=0;i<sentenceList.size();i++)
{
for(int j=0;j<largest;j++)
{
if(trim[i][j]!=null)
System.out.print(trim[i][j]+" ");
}
System.out.println();
}