赞
踩
在上一章中,我们已经推导出了计算文档d属于类别c的概率的公式,记为P(c|d)。
我们已将 P(c|d) 的标准公式(如许多论文1 中使用的那样)转换为数值稳定的形式。
我们使用朴素贝叶斯分类器在 Python 中实现。朴素贝叶斯方法的正式介绍可以在我们的前一章中找到。
Python 是文本分类的理想选择,因为它是强大的字符串类和强大的方法。此外,Python 的正则表达式模块 re 为用户提供了超越其他编程语言的工具。
唯一的缺点可能是这个 Python 实现没有针对效率进行调整。
基于词袋模型的文档表示如下图所示:
我们的实现需要正则表达式模块 re 和 os 模块:
导入 再
导入 操作系统
我们将在我们的实现中使用字典章节练习 1 中的函数 dict_merge_sum :
def dict_merge_sum ( d1 , d2 ):
""" 将带有数值和
可能不相交的键的
两个字典 d1 和 d2合并,如果 两个值中都存在,
则将这些值相加,否则将缺失值视为 0"""
返回 { k : d1 。得到( k , 0 ) + d2 。get ( k , 0 ) for k in set ( d1 ) | 设置(d2 ) }
d1 = dict ( a = 4 , b = 5 , d = 8 )
d2 = dict ( a = 1 , d = 10 , e = 9 )
dict_merge_sum ( d1 , d2 )
{'e':9,'d':18,'a':5,'b':5}
class BagOfWords ( object ):
""" 实现一个词袋,词与它们
在“文档”中的使用频率
相对应,供 Document 类、Category 类和 Pool 类使用。"""
def __init__ ( self ):
self 。__number_of_words = 0
self 。__bag_of_words = {}
def __add__ ( self , other ):
""" 重载 "+" 运算符以连接两个 BagOfWords """
erg = BagOfWords ()
erg 。__bag_of_words = dict_merge_sum ( self . __bag_of_words ,
other . __bag_of_words )
返回 erg
def add_word ( self , word ):
""" 在字典 __bag_of_words"""
self 中添加了一个单词。__number_of_words += 1
如果 单词 在 self 中。__bag_of_words :
自我。__bag_of_words [ word ] += 1
else
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。