2013-05-31 42 views
-4

問題: 詞幹刪除單詞後綴以將折曲(或有時衍生)的單詞減少到其基本或根形式。 例如「友善」是「朋友」的轉折。通過阻止(在這種情況下,詞幹意味着刪除後綴「ly」),「友好」被簡化爲「朋友」。 給定一個令牌列表和一個後綴列表 你的任務是到 編寫一個函數,打印到標準輸出(stdout),如果在後綴列表中找到後綴被刪除的所有標記(請在每行打印一個標記) 如果有多個可移除的後綴,請選擇最長的後綴 請注意,您的函數將收到以下參數: 標記 這是一個給出上述標記的字符串數組 後綴 這是一個給出上述後綴的字符串數組 數據約束 令牌數組的長度不會超過1000 後綴數組的長度不會超過100個 所有字符串比較是大小寫敏感的(即:酷=涼) 效率約束 您的功能預期打印請求的結果和在小於2秒 返回例 輸入輸出 查詢: 「友好」, 「離開」, 「強大」, 「中」 後綴: 「荷蘭國際集團」, 「立法院」, 「UL」, 「FUL」 朋友 明顯優於 功率 在 說明 對於「強大」一詞我們可以刪除後綴「ul」或「ful」,但我們選擇後者是因爲它是最長的。刪除單詞後綴以減少變形

我的代碼:

class MyClass { 

     public static void token_stemming(String[] tokens, String[] suffixes) 
    { 
     int count=0; 
     String[] stemmedList = new String[tokens.length]; 
     for(int i=0; i<tokens.length; i++) 
     { 
      int length=0;int flag=0; 
      for(int j=0; j<suffixes.length; j++) 
      { 
       if(tokens[i].contains(suffixes[j])) 
       { 
        int strlength = tokens[i].length()-1; 
        int suflegnth = suffixes[j].length()-1; 
        for(int z=suffixes[j].length(); z>0; z--) 
        { 
         if(tokens[i].charAt(strlength--)==suffixes[j].charAt(suflegnth--)) 
         { 

         } 
         else 
         { 
          flag=1; 
         } 

        } 
        if(length<suffixes[j].length() && flag==0) 
        { 
         length = suffixes[j].length(); 
        } 
       } 

      } 

      stemmedList[count] = tokens[i].substring(0, tokens[i].length()-length); 
      System.out.println(stemmedList[count]); 
      count++; 
     } 
    } 
} 
+1

我不完全確定你在找什麼,但標準詞幹是由馬丁波特。我在我的博客上有一個實現:http://programmingpraxis.com/2009/09/08/porter-stemming/。 – user448810

+0

有很多詞幹。谷歌「雪球幹手」 – Bohemian

回答

1

查找這部分代碼。

if(tokens[i].charAt(strlength--)==suffixes[j].charAt(suflegnth--)) 
{ 
    // this section is where 
    // you should code 
    // the answer to your homework 
} 
else 
{ 
    flag=1; 
}