解析"停用词"使用数组列表

时间:2015-03-26 18:35:15

标签: java stringtokenizer

我正在使用一个带有三个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部分它的工作方式,我只得到了停用词。

1 个答案:

答案 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();
}