我想实现与正克(最好是在PHP)某些应用程序。
哪种类型的正克是对于大多数用途较为充足? 词级别或字符级的n-gram? 你怎么能实现在PHP中的n-gram,分词?
首先,我想知道是什么的N-克到底是。 它是否正确? 这就是我所理解的n-gram:
一句话:“我住在纽约。”
字级的双字母组(2 N):“#我”,‘我住’,‘住’,‘在纽约’,‘纽约#’
字符级双字母组(2 n)的: “#I”, “I#”, “#1”, “力”, “IV”, “已经”, “E#”, “#I”, “在”,“ N#”, “#N”, “NY”, “Y#”
当你有这样的阵列的n元的零件,你放弃了重复者,并添加计数器为每个零件提供频率:
字级双字母组:[1,1,1,1,1]
字符级双字母组:[2,1,1,...]
它是否正确?
此外,我想更多地了解你可以用正克做什么:
- 如何才能辨别使用正克文的语言?
- 是否有可能用正克,即使你没有一个双语语料库做机器翻译?
- 我怎样才能建立一个垃圾邮件过滤器(垃圾邮件,火腿)? 结合正克用贝叶斯过滤器?
- 我该怎么办的话题点滴出血? 例如:一个是关于篮球或狗的文本? 我的方法(做一个维基百科的文章“狗”和“篮球”以下):建立两个文件正克载体,规范他们,计算曼哈顿/欧氏距离,越接近结果是1就越高相似
你觉得我的应用程序的方法,特别是最后一个是什么?
我希望你能帮助我。 提前致谢!
Word中的n-gram一般会为您提供语言检测,这里有点像字符卦可能提供更好的结果可能是个例外何况大多数文本分析应用更加有用。 实际上,您将创建n元向量在你感兴趣的检测每种语言文本的语料库,然后在每个语料库比较八卦的频率,你分类文档中的卦。 例如,卦the
可能更频繁地出现在英国比在德国和将提供统计相关的一些水平。 一旦你有你的文档中的n-gram的格式,你有作进一步的分析,贝叶斯过滤器,N-近邻,支持向量机等多种算法进行选择..
你提到的应用,机器翻译可能是最牵强,因为正独自克不会给你带来很远了路径。 转换的输入文件的n-gram表现就是把数据转化为进一步特征分析的格式的方式,但你失去了很多的上下文信息,它可能不是翻译有用。
有一点需要注意的是,它是不够的,对一个文档创建矢量[1,1,1,2,1]和矢量[2,1,2,4]为另一个文件,如果尺寸不匹配。 也就是说,在载体中的第一项不能the
一个文档中,并is
在另一个或算法将无法正常工作。 你会风与像[0,0,0,0,1,1,0,0,2,0,0,1]载体,因为大多数的文件将不包含最正克你有兴趣在这个“衬向上”的功能是必不可少的,它需要你来决定‘提前’什么的n-gram您将被包括在您的分析。 通常情况下,这是作为一个二传算法,先决定的各种正克的统计显着性决定如何继续。 谷歌“特征选择”了解更多信息。
基于词的n-gram加上支持向量机的一个很好的方式来进行的话题斑点,但你需要“在主题”大语料库文本预处理的分成和“题外话”训练分类。 你会发现大量的研究论文,解释像一个网站的各种方法对这一问题鏁 。 我不会推荐的欧氏距离的方法解决这个问题,因为它基于统计学意义不重量个人正克,这样两个文件既包括the
, a
, is
,和of
会被认为比两个文件一个更好的匹配既包括Baysian
。 从您的n-gram的兴趣移除停止词将一定程度上改善这一点。
您是关于正克的定义是正确的。
您可以使用单词级的n-gram搜索类应用。 人物等级正克能多为文本本身的分析中使用。 例如,识别文本的语言,比语言的既定频率我会用字母的频率。 也就是说,文本应大致匹配该语言的字母出现的频率。
在PHP词n元标记生成器可以使用的strtok来完成:
http://us2.php.net/manual/en/function.strtok.php
对于用字符分割:
http://us2.php.net/manual/en/function.str-split.php
然后,你可以拆分阵列,只要你愿意到任意数量的正克。
贝叶斯过滤器需要训练,用作垃圾邮件过滤器,它可以结合正克使用。 然而,你需要给它足够的输入,以便吸取教训。
你的最后一个方法听起来体面尽可能学习页面的上下文......这仍是相当但很难做到,但正克听起来像一个良好的起点,这样做。