2015-06-25 81 views
-1

我想找到波斯語動詞的詞幹。首先,我製作了一個包含一些當前和異常干擾的文件。我首先需要的是,我的代碼在文件中搜索,如果詞幹在那裏會返回詞幹,如果不是,它會遍歷剩餘的代碼,並通過刪除後綴和前綴返回詞幹。問題1)它沒有注意文件並忽略它,它只是通過代碼的其餘部分並輸出錯誤的詞幹,因爲異常在文件中。 2)因爲我使用「for」,動詞的後綴和前綴影響其他動詞,並省略其他動詞的後綴和前綴,有時會輸出錯誤的詞幹。我應該如何更改每個「for」循環獨立工作的代碼,而不會影響其他代碼? (我只需要寫一個函數,然後調用它)Python中的詞幹問題

我減少了一些後綴和前綴。

def stemmer (verb, file): 
    with open (file, encoding = "utf-8") as f: 
     f = f.read().split() 
     for i in f: 
      if i in verb: 
      return i 
      else: 
       for i in suffix1:  
        if verb.endswith(i): 
         verb = verb[:-len(i)] 
         return verb 
+0

你能更清楚地解釋問題嗎?增加一些例子可能會有所幫助! – Kasramvd

+0

您在嵌套循環中重複使用相同的循環變量'i'來表示不同的事物。這可能不會達到你的期望。順便說一句,如果你正在使用語言數據,你可能想看看[NLTK](http://www.nltk.org/)。 –

+0

另請注意,'split'只處理空格。它不會刪除點。你可能想看的另一件事是[正則表達式](https://docs.python.org/2/library/re.html)。他們可以幫助您找到前綴和後綴。 –

回答

0

我找到了答案。該問題是由「else:」引起的。沒有必要這樣做。

def stemmer (verb, file): 
    with open (file, encoding = "utf-8") as f: 
     f = f.read().split() 
     for i in f: 
      if i in verb: 
       return i 




     for i in suffix1:  # ماضي ابعد 
      if verb.endswith(i): 
       verb = verb[:-len(i)] 
       break 
1

你不必把所有的代碼,sara。我們只關心導致問題的片段。

我的猜測是有問題的部分是檢查,可能會因爲分割字符後的字符而導致大部分時間失敗。通常情況下,當你分割的標記,你還需要與strip()方法修剪結束字符:

>>> 'who\n'.strip() in 'who' 
True 

條件語句,如:

>>> "word\n" in "word" 
False 

>>> 'who ' in 'who' 
False 

總是會失敗,這就是爲什麼該程序不檢查根本就是例外。

+0

如果它先讀取文件,然後再讀取其餘的代碼,則問題可以解決。我應該如何改變它剛剛讀取文件的代碼,並且如果詞幹在那裏,它會返回它,如果不是,它會進入代碼的其餘部分以刪除詞綴? – sara