Php N-grams:解释+;2项申请

Php N-grams:解释+;2项申请,php,nlp,analysis,n-gram,Php,Nlp,Analysis,N Gram,我想用n-gram实现一些应用程序(最好用PHP) 哪种类型的n-gram更适合大多数用途?单词级还是字符级n-gram?如何在PHP中实现n-gram-tokenizer 首先,我想知道N-gram到底是什么。这是正确的吗?这就是我对n-grams的理解: 句子:“我住在纽约。” 单词级大字组(2代表n):“#I',“I live”,“live in”,“in NY”,“NY#” 字符级大图(2代表n):“I”、“I”、“l”、“li”、“iv”、“ve”、“e”、“I”、“in”、“n”

我想用n-gram实现一些应用程序(最好用PHP)


哪种类型的n-gram更适合大多数用途?单词级还是字符级n-gram?如何在PHP中实现n-gram-tokenizer


首先,我想知道N-gram到底是什么。这是正确的吗?这就是我对n-grams的理解:

句子:“我住在纽约。”

单词级大字组(2代表n):“#I',“I live”,“live in”,“in NY”,“NY#”

字符级大图(2代表n):“I”、“I”、“l”、“li”、“iv”、“ve”、“e”、“I”、“in”、“n”、“n”、“n”、“NY”、“Y”

当您拥有这个n克部件阵列时,您将删除重复的部件,并为每个部件添加一个计数器,给出频率:

单词级双字母表:[1,1,1,1,1]

字符级双字符组:[2,1,1,…]

这是正确的吗


此外,我想了解更多关于n-grams的功能:

  • 如何使用n-grams识别文本的语言
  • 即使没有双语语料库,也可以使用n-gram进行机器翻译吗
  • 如何构建垃圾邮件过滤器(垃圾邮件,火腿)?将n-gram与贝叶斯过滤器相结合
  • 我如何进行主题定位?例如:是关于篮球还是关于狗的文本?我的方法(通过维基百科关于“狗”和“篮球”的文章进行以下操作):为两个文档构建n-gram向量,对它们进行标准化,计算曼哈顿/欧几里得距离,结果越接近1,相似度越高
您对我的应用程序方法有什么看法,尤其是最后一种



我希望你能帮助我。提前谢谢!

你对n-grams的定义是正确的

您可以在搜索类型应用程序中使用单词级别的n-grams。字符级别的n-grams可以更多地用于文本本身的分析。例如,为了识别文本的语言,我将使用字母的频率与语言的既定频率进行比较。也就是说,文本应该大致匹配occ的频率该语言中字母的出现

PHP中单词的n-gram标记器可以使用strtok完成:

对于字符,请使用拆分:

然后,您可以根据需要拆分数组,任意数量的n-gram

贝叶斯过滤器需要经过训练,以用作垃圾邮件过滤器,它可以与n-gram结合使用。然而,为了让它学习,你需要给它大量的输入


就学习页面上下文而言,您的最后一种方法听起来不错……但这仍然相当困难,但n-gram听起来是这样做的一个很好的起点。

Word n-grams通常对您提到的大多数文本分析应用程序更有用,但语言检测可能是一个例外,其中类似于字符的三角图可能会给出更好的结果。有效地,您可以为您感兴趣的每种语言的文本语料库创建n-gram向量,然后将每个语料库中的三角图的频率与您正在分类的文档中的三角图进行比较。例如,三角图
可能看起来更像f通常使用英语而不是德语,这将提供一定程度的统计相关性。一旦您拥有n-gram格式的文档,您就可以选择许多算法进行进一步分析、Baysian过滤器、n-最近邻、支持向量机等

在您提到的应用程序中,机器翻译可能是最牵强的,因为n-gram本身并不会让您走得很远。将输入文件转换为n-gram表示只是将数据转换为格式以进行进一步的特征分析的一种方法,但由于您丢失了大量上下文信息,它可能对您的应用程序没有帮助翻译

需要注意的一点是,仅为一个文档创建一个向量[1,1,1,2,1]和一个向量[2,1,2,4]是不够的对于另一个文档,如果维度不匹配。也就是说,向量中的第一个条目不能是一个文档中的
而另一个文档中的
,否则算法将不起作用。您将得到类似[0,0,0,0,1,1,0,0,2,0,0,0,1]的向量因为大多数文档不会包含您感兴趣的大多数n-gram。这种特征的“排列”是必不可少的,它要求您“提前”决定在分析中包含哪些Ngram。通常,这是一种两次通过算法,首先决定各种n-gram的统计显著性,以决定保留哪些。谷歌“功能选择”获取更多信息


基于单词的n-grams加上支持向量机是一种很好的主题识别方法,但是你需要一个预分类为“主题内”和“主题外”的大型文本语料库来训练分类器。你会在一个网站上找到大量的研究论文,解释了解决这个问题的各种方法。我不推荐欧几里德ean距离方法解决这个问题,因为它不会根据统计显著性对单个n-gram进行加权,所以两个文档都包括
the
a
is
,和
of
,将被认为比两个文档都包括
Baysian
的匹配更好。从n-g中删除停止词感兴趣的rams会在某种程度上改善这一点。

非常感谢您提供了详细的答案!我还有最后一个问题:矢量的n-gram比矢量的简单单词有什么优势?我的意思是:为什么要将“我住在纽约”拆分为“我住在,住在,在纽约”,而不是简单的“我住在,住在,在纽约”“?使用单词作为特征等同于n=1的基于单词的n-gram。增加n的优点是您可以在功能中获得更多的上下文。例如,知道两个文档都包含n-gram“the Who”可能比知道它们都分别包含“the”和“Who”更有用