标签: document-classification

用于文本分类的 nltk naivebayes 分类器

在下面的代码中,我知道我的 naivebayes 分类器工作正常,因为它在 trainset1 上正常工作,但为什么它在 trainset2 上不起作用?我什至在两个分类器上进行了尝试,一个来自 TextBlob,另一个直接来自 nltk。

from textblob.classifiers import NaiveBayesClassifier
from textblob import TextBlob
from nltk.tokenize import word_tokenize
import nltk

trainset1 = [('I love this sandwich.', 'pos'),
('This is an amazing place!', 'pos'),
('I feel very good about these beers.', 'pos'),
('This is my best work.', 'pos'),
("What an awesome view", 'pos'),
('I do not like this restaurant', 'neg'),
('I am tired of this stuff.', 'neg'),
("I can't deal with this", 'neg'),
('He is my sworn enemy!', …
Run Code Online (Sandbox Code Playgroud)

nlp machine-learning nltk document-classification text-classification

3
推荐指数
1
解决办法
794
查看次数

文件功能矢量表示

我正在构建一个文档分类器来对文档进行分类.

因此,第一步是将每个文档表示为用于训练目的的"特征向量".

经过一些研究,我发现我可以使用Bag of Words方法或N-gram方法将文档表示为向量.

使用OCR检索每个文档中的文本(扫描的pdf和图像),因此某些单词包含错误.我以前没有关于这些文件中使用的语言的知识(不能使用词干).

据我所知,我必须使用n-gram方法.还是有其他方法来表示文件?

如果有人可以将我链接到N-Gram指南以便更清晰地了解并了解其工作方式,我也将不胜感激.

提前致谢

algorithm machine-learning feature-extraction document-classification

2
推荐指数
1
解决办法
1499
查看次数

获取WordNet的指定单词的域名

我知道WordNet有域名层次结构:例如sport-> football.

1)是否可以列出所有相关的单词,例如,"sport-> football"子域?

  Response: goalkeeper, forward, penalty, ball, field, stadium, referee and so on.
Run Code Online (Sandbox Code Playgroud)

2)获取给定单词的域名,例如"守门员"?

 Need something like [sport->football; sport->hockey] or [football;hockey] or just 'football'.
Run Code Online (Sandbox Code Playgroud)

它用于文档分类任务.

nlp semantic-web cluster-analysis wordnet document-classification

2
推荐指数
1
解决办法
2172
查看次数

特征向量:训练与测试集的权重计算

我正在使用支持向量机进行文本分类,但基本上我对测试集的特征向量计算感到困惑.

对于训练特征向量,我为每个训练数据采用TF-IDF向量,并使用TF-IDF值构建特征矩阵[docs x terms].

但是如何计算测试集的特征向量呢?我应该只使用训练集中的TF-IDF值来计算它吗?

例如:在特定单词"apple"的训练集中,doc频率为5.对于测试集,我应该使用值5作为"apple"吗?或者根据测试集重新计算TF-IDF?或者说,我在计算特征向量时走错路吗?

提前致谢!

classification feature-extraction document-classification

2
推荐指数
1
解决办法
952
查看次数

如何将属性类型更改为String(WEKA - CSV到ARFF)

我正在尝试使用WEKA库制作SMS SPAM分类器.我有一个带有"标签"和"文本"标题的CSV文件.当我使用下面的代码时,它会创建一个包含两个属性的ARFF文件:

@attribute label {ham,spam}
@attribute text {'Go until jurong point','Ok lar...', etc.}
Run Code Online (Sandbox Code Playgroud)

目前,似乎text属性被格式化为名义属性,每个消息的文本都是一个值.但是我需要text属性是一个String属性,而不是所有实例中所有文本的列表.将text属性作为String将允许我使用StringToWordVector过滤器来训练分类器.

// load CSV
CSVLoader loader = new CSVLoader();
loader.setSource(new File(args[0]));
Instances data = loader.getDataSet();

// save ARFF
ArffSaver saver = new ArffSaver();
saver.setInstances(data);
saver.setFile(new File(args[1]));
saver.setDestination(new File(args[1]));
saver.writeBatch();
Run Code Online (Sandbox Code Playgroud)

我知道我可以像这样创建一个String属性:

Attribute tmp = new Attribute("tmp", (FastVector) null);
Run Code Online (Sandbox Code Playgroud)

但我不知道如何替换当前属性,或者在读取CSV之前设置属性类型.

我尝试插入一个新的String属性并删除当前的名义属性,但这会删除所有的SMS文本.我也尝试使用renameAttributeValue,但这似乎不适用于更改属性类型.

编辑: 我怀疑这个NominalToString过滤器将完成这项工作,但我不知道如何使用它.

任何建议将不胜感激.谢谢!

java csv weka arff document-classification

1
推荐指数
1
解决办法
8104
查看次数