2016-11-18 61 views
0

我正在處理非常短的詞串,其中一些是愚蠢的。假設,我可以有一串「你是一個」,如果我刪除了停用詞,該字符串將是空白的。由於我在循環中進行分類,因此如果出現空白字符串,它會停止並顯示錯誤。我創建了下面的代碼來解決這個問題:Python NLTK - 防止停用詞去除每個詞

def title_features(words): 
filter_words = [word for word in words.split() if word not in stopwords.words('english')] 
features={} 
if len(filter_words) >= 1: 
    features['First word'] = ''.join(filter_words[0]) 
else: 
    features['First word'] = ''.join(words.split()[0]) 
return features 

這可以確保我沒有錯誤,但我不知道是否有更有效的方式來做到這一點。或者一種方式去做它不會擺脫所有單詞的地方,如果它們都是停用詞。

+0

這聽起來像停止詞刪除不是你的語料庫的好主意...... –

+0

不是所有的人都是這樣的。 我不確定這是不是一個好主意,但我要測試一下。 –

回答

1

你可以爲重新寫:

​​

將於filtered,如果它不是空的(例如: - 具有的長度或一個或多個),或者是空的情況下,再進行拆分原始的,如果它是空的,則默認爲空字符串的一個元素列表。你比第一個使用[0]的元素(無論是第一個不停止的單詞,字符串的第一個單詞還是一個空字符串)都要使用[0]

2

最簡單的解決方案是檢查過濾結果,並在必要時恢復完整的單詞列表。然後你的代碼的其餘部分可以使用一個單獨的變量而不用檢查。

def title_features(words): 
    filter_words = [word for word in words.split() if word not in stopwords.words('english')] 
    if not filter_words:  # Use full list if necessary 
     filter_words = words 

    features={} 
    features['First word'] = filter_words[0] 
    features[...] = ... 

    return features