2014-06-22 7 views
12

मेरे पास यह उदाहरण है और मैं जानना चाहता हूं कि यह परिणाम कैसे प्राप्त करें। मैं पाठ है और मैं यह तो tokenize मैं बाइग्राम और trigram और fourgram किपायथन एनएलटीके: बिग्राम ट्रिग्राम चार ग्राम

import nltk 
from nltk import word_tokenize 
from nltk.util import ngrams 
text = "Hi How are you? i am fine and you" 
token=nltk.word_tokenize(text) 
bigrams=ngrams(token,2) 

Bigrams की तरह एकत्रित करते हैं: [('Hi', 'How'), ('How', 'are'), ('are', 'you'), ('you', '?'), ('?', 'i'), ('i', 'am'), ('am', 'fine'), ('fine', 'and'), ('and', 'you')]

trigrams=ngrams(token,3) 

trigrams: [('Hi', 'How', 'are'), ('How', 'are', 'you'), ('are', 'you', '?'), ('you', '?', 'i'), ('?', 'i', 'am'), ('i', 'am', 'fine'), ('am', 'fine', 'and'), ('fine', 'and', 'you')]

bigram [(a,b) (b,c) (c,d)] 
trigram [(a,b,c) (b,c,d) (c,d,f)] 
i want the new trigram should be [(c,d,f)] 
which mean 
newtrigram = [('are', 'you', '?'),('?', 'i','am'),...etc 

किसी भी विचार मददगार साबित होंगे

+0

मुझे समझ में नहीं आता है; ऐसा लगता है कि आप पहले से ही ngrams उत्पन्न कर चुके हैं? – Emre

+0

@ मेरा सवाल यह है कि नयाट्रेट्राम कैसे प्राप्त करें, मैं एक ऐसा फ़ंक्शन ढूंढने की कोशिश कर रहा हूं जो बिग्राम के तत्व के अंदर खोज सके और इसे ट्रिग्राम के तत्व से तुलना कर सके और केवल –

उत्तर

6

यदि आप कुछ सेट सिद्धांत लागू करते हैं (यदि मैं पूर्णांक हूं अपने प्रश्न को सही ढंग से दोहराते हुए), आप देखेंगे कि आपके द्वारा इच्छित ट्रिग्राम केवल token सूची के तत्व [2: 5], [4: 7], [6: 8] आदि हैं।

आप उन्हें इस तरह उत्पन्न कर सकता है:

>>> new_trigrams = [] 
>>> c = 2 
>>> while c < len(token) - 2: 
...  new_trigrams.append((token[c], token[c+1], token[c+2])) 
...  c += 2 
>>> print new_trigrams 
[('are', 'you', '?'), ('?', 'i', 'am'), ('am', 'fine', 'and')] 
+0

ले लें, वास्तव में मेरा प्रश्न किसी अन्य प्रश्न से संबंधित है यदि आप ले सकते हैं इस सवाल पर एक नज़र आपको शायद पूरा विचार मिलेगा http://stackoverflow.com/questions/24289553/python-nltk-ngrams-filtering-and-excluding?noredirect=1#comment37580272_24289553 –

+0

और इस प्रश्न में आपका समाधान सही है –

0

मैं इसे इस तरह कार्य करें:

def words_to_ngrams(words, n, sep=" "): 
    return [sep.join(words[i:i+n]) for i in range(len(words)-n+1)] 

इस इनपुट के रूप में शब्दों का एक सूची लेता है और ngrams की सूची लौटाता है (के लिए दिया एन), sep से अलग (इस मामले में एक स्थान)।

संबंधित मुद्दे