实现空格分隔词分类器算法的问题

时间:2011-08-09 05:55:13

标签: java algorithm classification

我有一个文本并将其拆分为由空格分隔的单词。

我正在对单位进行分类,如果它出现在同一个单词中,它们会起作用(例如:'100m','90kg','140°F','US $ 500'),但我遇到了问题单独出现,每个部分都在一个单词中(例如:'100°C','US $ 450','150 km')。

分类器算法可以理解单位是否在右边并且缺少值是在左侧还是右侧。

我的问题是如何迭代列表中提供纠正字的所有单词给分类器。

这只是代码的一个例子。我试过很多方法。

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

换句话说,我需要遍历列表,对所有单词进行分类,如果需要测试前一个单词,则提供最后一个单词和单位。如果需要下一个单词,请提供单位和下一个单词。看似简单,但我不知道该怎么做。

2 个答案:

答案 0 :(得分: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();
    }
}

这不完整,因为我不知道你的分类器究竟做了什么,但它应该让你知道如何继续。

答案 1 :(得分: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);
            }

        }
    }

}