信息检索库

irlib的Python项目详细描述


信息检索库
==


==我开始编写这个库,作为我的"信息检索和自然语言处理"(ir和nlp)的一部分<;http://www.uea.ac.uk/study/module/mod detail/cmpsmb29>;``东英吉利大学的模块<;http://www.uea.ac.uk/>;`。它主要用于检测评论垃圾邮件(机器学习-分类)。但是,它有更多的功能,如"向量空间模型(vsm)"<;http://en.wikipedia.org/wiki/vector_space_model>;`````,以及一些其他的ir功能,如标记化、n-grams、词干和pos(词性)标记。

要在您的计算机上安装python,可能需要另一个**可选的**模块,`nltk<;http://nltk.org/>;`
只有在词干和词性(词性)标记时才需要这个模块


要安装包,请编写::



代码组织
----


首先,代码分为以下主要组件:

。矩阵.py
指标。py
。分类器.py
。预处理器.py
。配置。py
。superlist.py

matrix.py:这是实现文档(矢量空间)索引的地方。


metrics.py:距离度量(余弦和欧几里德距离)。


classifier.py:在这里实现以下分类器:

*rocchio:rocchio classifier
*k nn:k-nn classivier
*bayes:naive bayes分类器

解析标记、词干和词性标记的re-files实现了
这里应该实现更多的特征选择算法(如互信息增益)。


和metrics.py,
但是您可能会发现preprocessor.py也很有用:

es:
prep=preprocessor()
mx=matrix()
metric=metric s()


为简单起见,假设您有一个文本文件tweets.txt,
,每一行代表一个单独的tweet(文档)。

我们将逐行阅读该文件,然后使用prepocessor将行标记为单词。
ngram_标记器有更多选项,例如生成bigrams,
将标记转换为较低的空间,词干和转换为pos。
但是,我们现在将坚持使用默认选项。
然后将文档加载到vsm中,又名矩阵。
关于频率和do_padding选项的更多信息,请参见:

fd=open('tweets.txt','r')
对于fd.readlines()中的行:
terms=prep.ngram_tokenizer(text=line)
mx.add_doc(doc id='some-unique-identifier',
doc terms=terms,
frequency=true,
do_padding=true)

ry.
我们还需要将查询中使用的术语与从文档中读取的术语对齐,
也就是说,我们需要将它们放在等长列表中,并忽略查询中的术语
在读取文档时以前看不到的::


terms=prep.ngram_tokenizer(text=q)
q_vector=query矢量(项,频率=假)

最后,为了得到与我们的查询最匹配的文档,
我们可以在矩阵中的所有文档上循环,并找到距离最小的文档。
我们只在这里显示循环,您可以很容易地比较距离,
并根据文档的相关性对文档进行排序,如果您想:

self.mx.docs中的文档:
distance=metric.euclid_vectors(doc['terms',q_vectors)

即,如果术语在文档中出现n次,则其频率为n。如果为false,则我们使用多变量(bernoulli)模式,
即,如果术语在文档中出现至少一次,则其频率为1
否则其频率为零。
如前所述,您通常需要多项式模式,
我们只是把bernoulli模式放在朴素的贝叶斯分类器上,每次添加新文档时,我们都会看到新的术语,因此如果术语表示矩阵中的列,文档表示行,那么我们可能会以长度大于订单行的新行结束。re是将较旧行的长度与较新行的长度对齐。
因此,您可以对每个新文档将其设置为true,
或在完成后调用mx.do_padding()。

请稍等,还有两个注意事项:

*在上一个示例中,我们尚未将vsm转换为tf.idf,
但是,通常需要这样做。因此,在加载文档和执行搜索之前,您必须调用以下方法:


mx.tf-idf()

assification
--------


您的代码应该执行以下操作:


*读取和分析配置文件::

目录:sample.conf
config=configuration(config_file='your_file.conf')
config.load_configuration()

*启动预处理器::

ern='\w+',lower=true,stem=false,pos=false,ngram=2)


评估模块:

/>ev=evaluation(config=config,fold=myfold)

*选择并启动所需的分类器[rocchio,knn或naive bayes]:

se=true或false
fold,请参见上面的详细信息
配置类和计算类的对象
ml=naivebayes(verbose=verbose,fold=myfold,config=confi)g,ev=ev)

*training::

#文档ID:您可以任意调用它
您应该告诉分类器该文档属于哪个类
;这应该与配置文件
ml中提到的类相同。添加文档(文档ID=文档ID,文档类=类名称,文档术语=术语)

*some house keeping::

你应该首先调用do padding来对齐和潮汐读取数据
ml.do_padding()

G::

就像在培训中一样,您可以使用预处理器
terms=prep.ngram_tokenizer(text=file_data)

评估结果:

行为
--

+name:tarek amr
+twitter:@gr33nda

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
JavaGCP:一个VM可以位于具有相同地址的不同网络上吗?   java查找安卓中第一个数组的第二个数组中存在的元素的索引   java摄像头活动不工作,设置参数失败   用于python的Base64转换的Java等效代码   为什么JPA/Hibernate在我尝试运行@Query时抛出“java.lang.NegativeArraySizeException:1”?   如何在ubuntu for java的终端上设置路径?   java为什么这两个IP不同?   java JPA:如何将本机查询结果集转换为POJO类集合   java如何在|(12)|(23)中用数字拆分字符串   异常处理如何让程序在达到Java目标后停止运行   java如何不添加以特定字符开头的元素   java如何通过字符串获得swing按钮名称?   java如何在响应不成功时读取改装中的错误体?   java*更新*现在我的程序可以编译但不运行了?