使用数组列表解析 "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();
}