朴素贝叶斯情感分析的 PoS 实现
PoS Implementation with Naive Bayes Sentiment Analysis
我正在尝试对相对较大的数据集(10000 行)应用情绪分析(预测负面和正面推文)。到目前为止,我使用朴素贝叶斯和我的名为 "final" 的方法提取特征的方法仅获得了 ~73% 的准确率,如下所示。我想添加 PoS 来帮助分类,但我完全不确定如何实现它。我尝试编写一个名为 "pos" 的简单函数(我在下面发布)并尝试使用我清理过的数据集上的标签作为特征,但这样只能获得大约 52% 的准确率。任何人都可以引导我朝着正确的方向前进为我的模型实施 PoS?谢谢。
def pos(word):
return [t for w, t in nltk.pos_tag(word)]
def final(text):
"""
I have code here to remove URLs,hashtags,
stopwords,usernames,numerals, and punctuation.
"""
#lemmatization
finished = []
for x in clean:
finished.append(lem.lemmatize(x))
return finished
您应该先将推文拆分成句子,然后进行分词。 NLTK为此提供了一种方法。
from nltk.tokenize import sent_tokenize
sents = sent_tokenize(tweet)
在此之后,将此句子列表提供给您的 nltk.pos_tag
方法。那应该给出准确的 POS 标签。
我正在尝试对相对较大的数据集(10000 行)应用情绪分析(预测负面和正面推文)。到目前为止,我使用朴素贝叶斯和我的名为 "final" 的方法提取特征的方法仅获得了 ~73% 的准确率,如下所示。我想添加 PoS 来帮助分类,但我完全不确定如何实现它。我尝试编写一个名为 "pos" 的简单函数(我在下面发布)并尝试使用我清理过的数据集上的标签作为特征,但这样只能获得大约 52% 的准确率。任何人都可以引导我朝着正确的方向前进为我的模型实施 PoS?谢谢。
def pos(word):
return [t for w, t in nltk.pos_tag(word)]
def final(text):
"""
I have code here to remove URLs,hashtags,
stopwords,usernames,numerals, and punctuation.
"""
#lemmatization
finished = []
for x in clean:
finished.append(lem.lemmatize(x))
return finished
您应该先将推文拆分成句子,然后进行分词。 NLTK为此提供了一种方法。
from nltk.tokenize import sent_tokenize
sents = sent_tokenize(tweet)
在此之后,将此句子列表提供给您的 nltk.pos_tag
方法。那应该给出准确的 POS 标签。