स्टैक ओवरफ्लो और ब्लॉग्स पर आए विभिन्न उत्तरों के आधार पर, यह वह तरीका है जिसका मैं उपयोग कर रहा हूं, और यह वास्तविक शब्दों को काफी अच्छी तरह से वापस करता है। विचार आने वाले पाठ को शब्दों के एक सरणी में विभाजित करना है (जो भी विधि आप चाहें) का उपयोग करें, और फिर उन शब्दों के लिए भाषण (पीओएस) के कुछ हिस्सों को ढूंढें और उन शब्दों का उपयोग करें और शब्दों को स्टेम करने में मदद करें।
आप ऊपर का नमूना बहुत अच्छी तरह से काम नहीं करते हैं, क्योंकि पीओएस निर्धारित नहीं किया जा सकता है। हालांकि, अगर हम एक वास्तविक वाक्य का उपयोग करते हैं, तो चीजें बहुत बेहतर काम करती हैं।
import nltk
from nltk.corpus import wordnet
lmtzr = nltk.WordNetLemmatizer().lemmatize
def get_wordnet_pos(treebank_tag):
if treebank_tag.startswith('J'):
return wordnet.ADJ
elif treebank_tag.startswith('V'):
return wordnet.VERB
elif treebank_tag.startswith('N'):
return wordnet.NOUN
elif treebank_tag.startswith('R'):
return wordnet.ADV
else:
return wordnet.NOUN
def normalize_text(text):
word_pos = nltk.pos_tag(nltk.word_tokenize(text))
lemm_words = [lmtzr(sw[0], get_wordnet_pos(sw[1])) for sw in word_pos]
return [x.lower() for x in lemm_words]
print(normalize_text('cats running ran cactus cactuses cacti community communities'))
# ['cat', 'run', 'ran', 'cactus', 'cactuses', 'cacti', 'community', 'community']
print(normalize_text('The cactus ran to the community to see the cats running around cacti between communities.'))
# ['the', 'cactus', 'run', 'to', 'the', 'community', 'to', 'see', 'the', 'cat', 'run', 'around', 'cactus', 'between', 'community', '.']