0

ArrayList に格納されたスペースで区切られたトークンで構成される文字列のリストがあります。文字列 1 のトークンが文字列 2 に存在するかどうかをスキャンする必要があります。スキャナーを使用してトークンをスキャンすることができました。ただし、スキャナーは私が望んでいたことをしません。

1 についての提案/アドバイスが必要
です。私が提供したコードを使用すると、スキャナーは 2 番目の NN トークンを含むすべての NN トークンを検索します。最初の NN トークンで停止し、すべての NN トークンのスキャンを続行する必要はありません。{ヘイリーの休憩に関するアドバイスはスキャナーを停止します}
2. [編集済み] もう 1 つの問題は、文字列 1 に 2 つの NN トークンがある場合、スキャナーは以前のスキャンで見つかったすべてのトークンをスキップするのに十分スマートでなければならないということです。スキャナは、文字列 1 の 2 番目の NN トークンを文字列 2 の 2 番目の NN トークンと照合できる必要があります。

これは私がこれまでに持っているものです..

import java.util.ArrayList;
import java.util.Scanner;

public class TokenMatching {

    public static void main(String[] args) 
    {   
        ArrayList<String> taggedArray = new ArrayList<String>(); 

        //Example how the string would look like
        String string1 = "WRB VBD NN VB IN CC RB VBP NNP";
        String string2 = "WRB NN MD PRP VB DT NN IN NNS POS JJ NNS"; 

        taggedArray.add(string1);
        taggedArray.add(string2);       

        //Nested for loop to match taggedArray(i) with taggedArray(j)
        for(int i = 0; i< taggedArray.size(); i++)
        {
            for(int j = i + 1; j < taggedArray.size(); j++)
            {
                Scanner scan1 = new Scanner(taggedArray.get(i));

                int index1 = 0;
                while(scan1.hasNext())
                {
                    String token1;
                    token1 = scan1.next();
                    System.out.println(token1);
                    Scanner scan2 = new Scanner(taggedArray.get(j));

                    int index2 =0;
                    while(scan2.hasNext())
                    {
                        String token2 = scan2.next();

                        if(token1.equals(token2))
                        {
                            int relPosition;                            
                            relPosition = Math.abs(index1-index2);

                            //The print lines help me keep track of what is going on in the loop
                            System.out.println("Match found.");
                            System.out.println("Relative position for " + token1 + " : " + relPosition);

                        }
                            else
                            {
                                System.out.println("No Match Found.");
                            }

                        index2++;
                    }

                    index1++;
                }               
            }           
        }    
    }
}

どんなアドバイスも大いに役立ちます。ありがとうございました。

4

2 に答える 2

1
  1. スキャナーが最初の出現のみをスキャンし、文字列 1 の次のトークンに移動する方法はありますか?

afterをif(token1.equals(token2))追加します。http://ideone.com/2o5Yzによって生成された出力は、あなたが望むものですか?break;System.out.println("Relative position for " + token1 + " : " + relPosition);

于 2012-09-05T10:25:54.890 に答える
0

使わない理由

String[] tokens1 = string1.split("\\ ");
String[] tokens2 = string2.split("\\ ");

配列を直接操作できるようになりました。

于 2012-09-05T10:26:18.867 に答える