我張貼這是一個評論,但認爲我還不如充實它與一些解釋一個完整的答案:
你想用str.split()
分割字符串轉換成單詞,然後幹每個字:
for word in text.split(" "):
PorterStemmer().stem_word(word)
當你想要得到的所有的梗單詞串起來,是微不足道的,然後加入這些莖一起回來。要做到這一點很容易和高效,我們使用str.join()
和generator expression:
" ".join(PorterStemmer().stem_word(word) for word in text.split(" "))
編輯:
您的其他問題:
with open("/path/to/file.txt") as f:
words = set(f)
在這裏,我們打開使用the with
statement(這是最好的文件打開文件的方式,因爲它可以正確地關閉它們,即使是在異常情況下也是如此,並且更具可讀性),並將內容讀取到一個集合中。我們使用一個集合,因爲我們不關心這些單詞的順序或重複,並且以後會更有效率。我假設每行有一個字 - 如果不是這種情況,並且它們用逗號分隔,或者使用str.split()
(與適當的參數一起使用str.split()
)分隔的空格可能是一個很好的計劃。
stems = (PorterStemmer().stem_word(word) for word in text.split(" "))
" ".join(stem for stem in stems if stem not in words)
這裏我們使用生成器表達式的if子句來忽略從文件中加載的單詞集中的單詞。一個集合上的成員資格檢查是O(1),所以這應該是相對有效的。
編輯2:
要刪除的話,他們是朵朵之前,這是更簡單:
" ".join(PorterStemmer().stem_word(word) for word in text.split(" ") if word not in words)
去除給定的話很簡單:
在
filtered_words = [word for word in unfiltered_words if not in set_of_words_to_filter]
'一個字text.split(''):stemmer.stem_word(word)'? – birryree
stemmed = for word in text.split(''):stemmer.stem_word(word)這個工作嗎? – ChamingaD
不完全。如果你想要一個詞幹的列表,你可以在'text.split('')]'中做'stemmed = [stemmer.stem_word(w)]。如果你想要一個句子,你可以做'sente =''.join(stemmed)',這將返回所有詞幹的句子。讓我知道這是否有幫助。 – birryree