信息检索库
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
==
==我开始编写这个库,作为我的"信息检索和自然语言处理"(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