我想用n-gram实现一些应用程序(最好是在PHP中)。
哪种类型的n-gram对于大多数目的更合适?单词级别的还是字符级别的n-gram?如何在PHP中实现一个n-gram分词器?
首先,我想知道什么是N-grams。以下是我理解n-gram的方式:
句子:“我住在纽约。”
单词级别的bigram(2个为n):“# I'”,“I live”,“live in”,“in NY”,“NY #”
字符级别的bigram(2个为n):“#I”,“I#”,“#l”,“li”,“iv”,“ve”,“e#”,“#i”,“in”,“n#”,“#N”,“NY”,“Y#”
当您有这些n-gram部分的数组时,您可以删除重复项并为每个部分添加计数器以给出频率:
单词级别的bigram:“[1, 1, 1, 1, 1]”
字符级别的bigram:“[2, 1, 1, ...]”
这是正确的吗?
此外,我想了解一下使用n-grams可以做什么:
- 如何使用n-grams识别文本的语言?
- 即使没有双语语料库,也是否可能使用n-grams进行机器翻译?
- 如何构建垃圾邮件过滤器(垃圾邮件、非垃圾邮件)?将n-grams与贝叶斯过滤器相结合?
- 如何做到话题发现?例如:一篇关于篮球或狗的文章?我的方法(对于“狗”和“篮球”的维基百科文章):为两个文档构建n-gram向量,对它们进行归一化,计算曼哈顿/欧几里得距离,结果越接近1,相似度越高。
您对我的应用程序方法有什么看法,特别是最后一个?
我希望你能帮助我。预先感谢!