2017-09-24 63 views
0

我是机器学习的新手。我目前想要的是分类是否某些单词是否属于某一类别。使用机器学习算法的词分类

让我更具体一些,输入一些单词时,我需要检查这些单词是否属于“马拉雅拉姆语”。

例如:enthayi ninakk sugamanno?

这些是用英语表达的一些马拉雅拉姆语单词。在给出这样的输入时,需要检查训练的数据,并且如果有任何输入单词属于“马拉雅拉姆语”类别,则需要显示它是马拉雅拉姆语。

我已经尝试做..

我试着将它与NaiveBayesClassifier分类,但它总是显示了所有输入数据的积极响应。

train = [ 
('aliya','Malayalam')] 
cl = NaiveBayesClassifier(train) 
print cl.classify('enthayi ninakk sugamanno') 

但打印语句使输出“马拉雅拉姆语”

回答

2

你需要正反两方面的数据训练分类。添加一堆英文文本或者您的域中可能的替代品是不难的。但是,您需要详细了解nltk分类器的实际工作方式,或者只能处理您在培训数据中看到的单词:您需要选择和提取分类器将用于执行的“功能”它的工作。

所以(从评论)你想把单个词语分类为马拉雅拉姆语或不是。如果你的“特征”是完整的单词,那么你正在用分类器浪费你的时间;只要制作一个马来亚语词汇的Python set(),并检查你的输入是否在其中。要走分类器路线,你必须弄清楚什么让一个词“看”马拉雅拉姆语给你(结尾?长度?音节结构?),并手动将这些属性变成特征,以便分类器可以决定它们的重要性。

更好的语言检测方法是使用字母三元组:每种语言都有一个不同的常用和不常见三元组的“轮廓”。你可以谷歌周围,或自己的代码。我用“余弦相似度”作为样本文本与参考数据之间距离的量度,取得了很好的结果。在this question中,您将看到如何计算余弦相似度,但是对于单字符计数;使用trigrams进行语言识别。

三元法的两个好处:你不依赖于熟悉的单词,或者不依赖于熟悉的单词,并且可以将它应用于比单个单词更长的文本(即使在过滤出英语之后),会给你更可靠的结果。 nltk的langid语料库提供数百种常用语言的卦数,但编译自己的统计数据也很容易。 (另请参阅nltk.util.trigrams()。)

+0

我刚刚添加了一些替代方案,但实际上系统显示的输出与Malayalam相同,即使输入数据不同。 –

+0

我建议你阅读文档。你没有正确初始化你的分类器,我很惊讶它甚至运行。你应该不加参数地创建它('cl = NaiveBayesClassifier()'),然后用'cl.train(data)'以*适当*格式的数据进行训练。你在哪里看到你正在使用的设置? – alexis

+0

http://stevenloria.com/how-to-build-a-text-classification-system-with-python-and-textblob/ 从这里我得到的语法... –