微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为自然语言处理朴素贝叶斯分类器设置数据结构

如何解决为自然语言处理朴素贝叶斯分类器设置数据结构

作为大学项目的一部分,我正在尝试构建一个朴素贝叶斯分类器,该分类器接收关于 Covid 的专栏文章,并确定它们是由《华尔街日报》还是《纽约时报》发表。

我已将训练集和测试集设置为 2 元组 (x,y) 列表,其中 x 是发布者,y 是文章正文。

我正在使用 LIWC 词典来确定每篇文章中单词类别之间的各种关系。 LIWC 词典是一组单词,分为驱动力、负面情绪、认知过程等各种类别。

def tagCounter(list,string):
    tagCount = 0
    for x in list:
        if string.find(x) != -1:
            tagCount = tagCount + 1
    else:
        tagCount = tagCount
    return tagCount

功能计算文章正文中带有特定标签(例如生物过程、驱动力、社交等)的词的使用情况

然后将其用于我的功能列表

def poliFeatures(string):
    features = {}
    features["PowOverSoc"] = tagCounter(powWords,string) > tagCounter(socialWords,string)
    features["PowOverDrive"] = tagCounter(powWords,string) > tagCounter(driveWords,string)
    features["SocOverDrive"] = tagCounter(socialWords,string)
    features["BioOverCog"] = tagCounter(bioWords,string) > tagCounter(cogWords,string)
    features["BioOverPerc"] = tagCounter(bioWords,string) > tagCounter(percWords,string)
    features["CogOverPerc"] = tagCounter(cogWords,string)
    features["PosOverNeg"] = tagCounter(posEmo,string) > tagCounter(negEmo,string)
    features["AnxOverSad"] = tagCounter(anxEmo,string) > tagCounter(sadEmo,string)
    features["AnxOverAnger"] = tagCounter(anxEmo,string) > tagCounter(angerEmo,string)
    features["AngerOverSad"] = tagCounter(angerEmo,string)
    features["DeathOverBio"] = tagCounter(deathWords,string) > tagCounter(bioWords,string)
    return features

这里的目标是获取每篇文章的布尔值列表。布尔值反映类别之间的关系。例如,第一个特征 PowOverSoc 返回 true 如果文章使用的 Power words 多于 Social words,否则返回 false

这就是我遇到困难的地方。我知道当我使用朴素贝叶斯方法时,例如classifier = nltk.NaiveBayesClassifier.train(trainingSet),我应该给它提供某种数据结构,将文章标签(即华尔街日报或纽约时报)与文章的特征配对。但鉴于我使用的功能的性质,我不确定如何设置此数据结构。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。