我想要实现的一些应用程序n-克(最好在PHP)。


哪种类型的n-克是更适用于大多数的目的?一个字水平或性格水平的n-gram?你怎么会实现一个n-gram-tokenizer在PHP?


首先,我想知道什么N-克到底是。这是正确的?这就是我如何了解n-克:

一句话:"我住在纽约。"

字水平的双字母组(2n):"#I',"我的生活","生活","在纽约",'NY#'

字水平的双字母组(2n):"#I","I","#l"、"li","四","五"、"e#","#我"、"in"、"n#","#N"、"纽约"、"Y#"

当你有这样的阵列的n-gram-部分,删除重复的,并添加一个计数器的每个部分给予的频率:

字水平的双字母组:[1, 1, 1, 1, 1]

字水平的双字母组:[2,1,1,...]

这是正确的?


此外,我想了解更多关于你可以做什么n-克:

  • 我如何可以识别的语言的文本使用的n-克?
  • 这是可以做到的机器翻译的使用n-克甚至如果你没有一个双语料库?
  • 我如何可以建立一个垃圾邮件过滤器(垃圾邮件、火腿)?结合n-克与贝叶斯器?
  • 我怎么可以做的主题发现?例如:是一个文本有关的篮球,或者狗?我的方法(执行以下与维基百科文为"狗"和"篮球"):建立的n-gram载于两份文件,正常化,计算曼哈顿/欧几里德距离,在更靠近其结果是1的相似度就越高

你怎么想我应用程序办法,尤其是最后一个吗?


我希望你能帮助我。在此先感谢!

有帮助吗?

解决方案

字n-克,一般将更有益于大多数文本分析应用的你说可能是个例外的语言的检测,这里的东西喜欢字卦可能得到更好的结果。有效,你会创建的n-gram矢量的一套案文的每种语言都有兴趣在检测,然后进行比较的频率卦在每个语料库为该八卦的文件分类.例如,卦 the 可能出现更加频繁,在英文比在德国,并将提供一定水平的统计的相关性。一旦你有了你的文件中的n-gram的格式,你有一个选择的多种算法进行进一步的分析,Baysian过滤器,N接近的邻居,支持向量机,等等。

申请说,机器翻译可能是最牵强,因为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-克你是感兴趣。这个'安排'的特征是必要的,并且它需要你来决定'在先'的是什么ngrams你将包括在分析。通常,这是实现为两个传递算法,以第一次决定的统计重要性的各种n-克来决定什么保持。谷歌'功能选择更多的信息。

字基于n-克加支持向量机器中的一个优秀的方式来执行,主题察觉,但是你需要一个大套的文本预先分类为'关于主题"和"关主题的训练的分类器。你会发现大量的研究论文说明各种办法对这个问题上一样的网站 citeseerx.我不会推荐的欧几里德距离的方法对这个问题,因为它并不重个人的n-克根据统计意义,因此两份文件,两者都包括 the, a, is, , of 会被认为是一个更好的匹配于两个文件都包括 Baysian.除停的话从你的n-克利息将改善这些。

其他提示

你是正确的约定义的n-克。

你可以使用的词级n-克为搜索类型的应用。字水平n-克可以用更多的供分析的文本本身。例如,识别的语言的文本,我会使用的频率的字母相比所建立的频率的语言。就是说,该案文应大致相匹配的发生频率的信件中,语言。

N-gram tokenizer对话在PHP可以通过使用strtok:

http://us2.php.net/manual/en/function.strtok.php

对于人物用分割:

http://us2.php.net/manual/en/function.str-split.php

然后你就可以分割列为你会喜欢的任何数量的n-克。

贝过滤器需要训练有素的使用作垃圾邮件过滤器,可以结合使用有n-克。但是你需要给它的大量输入,以便它了解。

你最后的办法听起来不错尽学习的上下文的一页...这是仍然相当困难的事,但是n-克听起来像一个良好的起点,这样做。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top