使用数组列表解析 "stop words"
Parsing "stop words" using an array list
我正在使用带有三个 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 部分,它就起作用了,我只得到停用词。
如果我没理解错的话,这就是你需要的...
问题是您在第三个 for 循环中添加了单词。您应该在第三个循环中检查条件,使用 break 退出到第二个循环,然后处理单词(在这种情况下添加)。
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();
}
我正在使用带有三个 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 部分,它就起作用了,我只得到停用词。
如果我没理解错的话,这就是你需要的... 问题是您在第三个 for 循环中添加了单词。您应该在第三个循环中检查条件,使用 break 退出到第二个循环,然后处理单词(在这种情况下添加)。
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();
}