世界上的语言种类很多,然而很多油相似之处,如何智能的识别出语言类别,也是如今自然语言处理的一个话题。用ngrams的理念来搭建语言模型从而识别出语言类别是一个基本简单的方法。(当然现在网上有很多API可以直接调用) 就比如以下的例子
malaysian(马来文) Semua manusia dilahirkan bebas
indonesian (印尼文)Semua orang dilahirkan merdeka
tamil (泰米尔语)Maitap piiviyiar cakalarum cutantiramkav piakkiaar
马来文和印尼文泰米尔语 这三种语言相似度特别大,如何只能判别出三种语言。根据已有的语料库,建立4-grams的语言模型。
这次是一次作业,由于第一次用python和nltk. 代码会显得重复冗长(大神见笑了)。希望能给正在学习语言处理和人工智能的朋友们起到一点参考价值。
没什么好说的,上代码。
#!/usr/bin/python
#import division
from __future__ import division
import re
import nltk
import sys
import getopt
#import ngrams from nltk to help build ngrams
from nltk.util import ngrams
# the LMs
#LM for indonesian
dict_indonesian = {}
#LM for malaysian
dict_malaysian = {}
#LM for tamil
dict_tamil = {}
#LM for store all the entries, to help smoothing
dict_all = {}
def build_LM(in_file):
"""
build language models for each label
each line in in_file contains a label and an URL separated by a tab(\t)
"""
print 'building language models...'
# This is an e