[英]Setting n-grams for sentiment analysis with Python and TextBlob
我想用Python
和TextBlob
庫對一些句子進行情感分析。 我知道如何使用它,但是有沒有辦法將n-grams
設置為它? 基本上,我不想逐字分析,但我想分析2個詞,3個詞,因為短語可以承載更多的含義和情感。
例如,這就是我所做的(它有效):
from textblob import TextBlob
my_string = "This product is very good, you should try it"
my_string = TextBlob(my_string)
sentiment = my_string.sentiment.polarity
subjectivity = my_string.sentiment.subjectivity
print(sentiment)
print(subjectivity)
但是我該如何申請,例如 n-grams = 2、n-grams = 3 等? 是否可以使用TextBlob
或VaderSentiment
lib 來做到這VaderSentiment
?
這是一個無需使用任何庫即可找到 n-gram 的解決方案。
from textblob import TextBlob
def find_ngrams(n, input_sequence):
# Split sentence into tokens.
tokens = input_sequence.split()
ngrams = []
for i in range(len(tokens) - n + 1):
# Take n consecutive tokens in array.
ngram = tokens[i:i+n]
# Concatenate array items into string.
ngram = ' '.join(ngram)
ngrams.append(ngram)
return ngrams
if __name__ == '__main__':
my_string = "This product is very good, you should try it"
ngrams = find_ngrams(3, my_string)
analysis = {}
for ngram in ngrams:
blob = TextBlob(ngram)
print('Ngram: {}'.format(ngram))
print('Polarity: {}'.format(blob.sentiment.polarity))
print('Subjectivity: {}'.format(blob.sentiment.subjectivity))
要更改 ngram 長度,請更改函數find_ngrams()
的n
值。
textblob 中沒有用於定義 n-gram 的參數,而不是用作情感分析特征的單詞/unigram。
Textblob 使用極性詞典來計算文本的整體情緒。 這個詞典包含unigrams,這意味着它只能給你一個詞的情感,而不能給你一個n>1的n-gram。
我想你可以通過將二元或三元輸入到情感分類器中來解決這個問題,就像你輸入一個句子然后創建一個包含累積情感值的 n-元字典一樣。 但我不確定這是個好主意。 我假設您正在尋找二元組來解決諸如否定( “不錯” )之類的問題,並且詞典方法將無法使用not將情緒值翻轉為bad 。
Textblob 還包含使用 naiveBayes 分類器而不是詞典方法的選項。 這是在 nltk 提供的電影評論語料庫上訓練的,但就我通過查看源代碼可以看出,訓練的默認特征是單詞/unigrams。 您可以在其中實現自己的特征提取器來提取 n-gram 而不是單詞,然后相應地重新訓練它並用於您的數據。
無論如何,我建議您使用 unigrams 和 n>1-grams 的組合作為特征,因為完全刪除 unigrams 可能會對您的表現產生負面影響。 Bigrams 分布更稀疏,因此在訓練時您會遇到數據稀疏問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.