2011-08-09 4 views
2

私はテキストを持っていて、それを空白で区切られた単語に分割します。空白で区切られた単語の分類アルゴリズムを実装する際の問題

私はユニットを分類しており、同じ単語(たとえば、 '100m'、 '90kg'、 '140°F'、 'US $ 500')で発生すると動作しますが、別々に表示され、各部分は単語で表示されます(例:「100℃」、「450ドル」、「150km」)。

分類器アルゴリズムは、ユニットが右にあり、値が欠落しているかどうかを左または右に理解できます。

私の質問は、リストにあるすべての単語に対して、どのようにして正しい単語を分類子に提供するのかということです。

これはコードの単なる例です。私はたくさんの方法で試しました。別の言葉で

for(String word: words){ 
    String category = classifier.classify(word); 
    if(classifier.needPreviousWord()){ 
     // ? 
    } 
    if(classifier.needNextWord()){ 
     // ? 
    } 
} 

、私はすべての単語を分類リストを反復処理する必要があり、前の単語をテストするために必要な場合、最後の単語とユニットを提供します。次の単語が必要な場合は、その単語と次の単語を入力します。シンプルに見えますが、どうやって行うのか分かりません。

+0

ユニットの前にどのユニットが値を必要とし、どのユニットが後に値する必要があるのか​​に関するデータがありますか? – Sathwick

+0

@Sathwickはい、前後の値を必要とするユニットはあらかじめ定義されています。例では、距離、重量、温度は前に必要です。必要な通貨のみ。 –

答えて

1

forループで暗黙のイテレータを使用しないで、明示的に使用します。その後、あなたは好きなように前後に行くことができます。

Iterator<String> i = words.iterator(); 
while (i.hasNext()) { 
    String category = classifier.classify(i.next()); 
    if(classifier.needPreviousWord()){ 
     i.previous(); 
    } 
    if(classifier.needNextWord()){ 
     i.next(); 
    } 
} 

私はあなたの分類器が正確に何をするかわかりませんが、それはあなたの進め方についてアイデアを与える必要がありますので、これは、完全ではありません。

+0

私のクラシファイアはユニットと名前を(今のところ)再調整します。距離、温度、プロペラ名、重さなど、または何かの単位であるが値がない場合は、単位を返します。 –

+0

私はあなたを正しく理解しているかどうかまだ分かりません。このコードはあなたを助けますか、別の質問を策定できますか? – Stephan

+0

私はイテレータを使っています。それが私を助けたと思う。私はそれでアルゴリズムを完成させるだけです。 –

0

これは役に立ちます。

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

    String previousWord = ""; 
    String nextWord = ""; 

    for(int i=0; i < words.size(); i++) { 
     if(i > 0) { 
      previousWord = words.get(i-1); 
     } 
     String currentWord = words.get(i); 

     if(i < words.size() - 1) { 
      nextWord = words.get(i+1); 
     } else { 
      nextWord = ""; 
     } 

     String category = classifier.classify(word); 
     if(category.needPreviousWord()){ 
      if(previousWord.length() == 0) { 
       System.out.println("ERROR: missing previous unit"); 
      } else { 
       System.out.println(previousWord + currentWord); 
      } 
     } 
     if(category.needNextWord()){ 
      if(nextWord.length() == 0) { 
       System.out.println("ERROR: missing next unit"); 
      } else { 
       System.out.println(currentWord + nextWord); 
      } 

     } 
    } 

} 
関連する問題