Разбор "стоп-слов" с использованием списка массивов
Я использую простой код с тремя циклами for для получения предложений из списка массивов, их токенизации, удаления стоп-слов и хранения остальных в двумерном массиве.
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, она работает и я получаю только стоп-слова
1 ответ
Решение
Если я вас правильно понял, это то, что вам нужно... Проблема была в том, что вы добавляли слова в 3-й цикл for. Вы должны проверить условие в 3-м цикле, выйти во 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();
}