2016-07-13 6 views
0

У меня есть десятки тонкостей твитов, сохраненных в одном .txt-файле, я хочу рассчитать вычисление самого высокого значения tf-idf первого Другими словами, я хочу сравнить значение tf-idf слова между различными твитами, в настоящее время единственное, что я могу выполнить, это сравнить значение tf-idf слова в тех же твитах, я не могу найти способ сравнить значение tf-idf слова между различными твитами.Python - как рассчитать самое высокое значение tf-idf первых 100 слов в разных tweeets

Пожалуйста, помогите мне, я был расстроен в течение долгого времени из-за этой проблемы. /(ㄒ о ㄒ)/~~

Удар мой код: (только в состоянии вычислить значение tfidf этого термина в тех же твитов)

with open('D:/Data/ows/ows_sample.txt','rb') as f: 
    tweet=f.readlines() 
lines = csv.reader((line.replace('\x00','') for line in tweet), delimiter=',', quotechar='"') 
wordterm=[] 
for i in lines: 
    i[1]= re.sub(r'http[s]?://(?:[a-z]|[0-9]|[[email protected]&+]|[!*\(\),]|(?:%[0-9a-f][0-9a-f]))+|(?:@[\w_]+)', "", i[1]) 
    tweets=re.split(r"\W+",i[1]) 
    tweets=[w.lower() for w in tweets if w!=""] 
    stopwords = open("D:/Data/ows/stopwords.txt", "r").read().split() 
    terms = [t for t in tweets if not t in stopwords] 
    wordterm.append(terms) 

word=[' '.join(t) for t in wordterm] 
tfidf_vectorizer = TfidfVectorizer(min_df = 1,use_idf=True) 
tfidf_matrix = tfidf_vectorizer.fit_transform(word) 
terms_name = tfidf_vectorizer.get_feature_names() 
toarry=tfidf_matrix.todense() 

#below code will output the tf-idf value of each tweets' terms. 
for ii in range(0,len(toarry)): 
    print u"第"+ ii +u"个tweets" 
    for jj in range(0,len(terms_name)): 
     print terms_name[jj],'-',tfidf_matrix[ii,jj] 

ответ

1

Теперь, когда я понимаю ваш вопрос, я буду стараться ответьте на ваш вопрос немного лучше.

Чтобы получить 100 лучших очков tf-idf, сравнимых по всем твитам, означало бы, что вы отпустите идею о том, что есть четкие твиты, или вы хотите сравнить одинаковые слова друг другу по счету tf-idf.

Итак, для первого сценария представьте, что все ваши слова находятся в 1 'документе'. Это по существу устранит «idf» аспект tf-idf, и то, что вы получите, в основном, является векторизатором слов, который можно сравнить друг с другом, и вы можете получить 100 лучших слов таким образом.

words = ['the cat sat on the mat cat cat'] 
tfidf_vectorizer = TfidfVectorizer(min_df = 1,use_idf=True) 
tfidf_matrix = tfidf_vectorizer.fit_transform(words) 
terms_name = tfidf_vectorizer.get_feature_names() 
toarry=tfidf_matrix.todense() 

toarry: 
    matrix([ .75, 0.25, 0.25, 0.25, 0.5]) 

Другой сценарий, что вы принимаете каждый твит по отдельности, а затем сравнить результаты их ТФ-IDF баллов. Это приведет к тому, что те же самые слова будут иметь разные баллы, потому что это то, что делает tf-idf - вычисляет значение слова в документе относительно корпуса.

words = ['the cat sat on the mat cat', 'the fat rat sat on a mat', 'the bat and a rat sat on a mat'] 
tfidf_vectorizer = TfidfVectorizer(min_df = 1,use_idf=True) 
tfidf_matrix = tfidf_vectorizer.fit_transform(words) 
terms_name = tfidf_vectorizer.get_feature_names() 
toarry=tfidf_matrix.todense() 
for i in tfidf_matrix.toarray(): 
    print zip(terms_name, i) 

[(u'and', 0.0), (u'bat', 0.0), (u'cat', 0.78800079617844954), (u'fat', 0.0), (u'mat', 0.23270298212286766), (u'on', 0.23270298212286766), (u'rat', 0.0), (u'sat', 0.23270298212286766), (u'the', 0.46540596424573533)] 
[(u'and', 0.0), (u'bat', 0.0), (u'cat', 0.0), (u'fat', 0.57989687146162439), (u'mat', 0.34249643393071422), (u'on', 0.34249643393071422), (u'rat', 0.44102651785124652), (u'sat', 0.34249643393071422), (u'the', 0.34249643393071422)] 
[(u'and', 0.50165133177159349), (u'bat', 0.50165133177159349), (u'cat', 0.0), (u'fat', 0.0), (u'mat', 0.29628335772067432), (u'on', 0.29628335772067432), (u'rat', 0.38151876810273028), (u'sat', 0.29628335772067432), (u'the', 0.29628335772067432)] 

Как вы можете видеть в результатах, одни и те же слова будут иметь различные результаты в каждом документе, потому что тс-IDF является оценкой этого термина в рамках каждого документа. Таким образом, эти два метода доступны вам, поэтому в зависимости от того, что вы хотите, вы можете выбрать, что лучше для ваших целей.

+0

Это должен быть комментарий, а не ответ –

+0

Да, но похоже, мне нужно 50 репутации, чтобы комментировать ... –

+0

А, я думал, что это было 10. Ну, лучше всего опубликуйте некоторые * актуальные * ответы;) (I пометили его для мода в любом случае, так что, возможно, они могут конвертировать его в комментарий для вас) –