中国語の単語は、Pythonプログラミング分野では、高精度、ワード部品の高効率化の欠如されている、しかし長い間、中国のテキスト処理の基本的な仕事です。次の記事では、Python中国語の単語のチュートリアルの最大の関連情報前方マッチングアルゴリズムの前に、必要に友人を参照することができますをご紹介することが主な理由です。
序文
我々は、すべての単語が比較的容易ないくつかのですが、中国が異なっているのでによる単語間に英語で単語が、文の区切りで、中国は、いわゆる正の言葉に、スペースで区切られていることを知っています最大マッチングと逆最大マッチングを説明するため、ここでサブワードマッチング、辞書マッチングする方法です。
最大マッチングアルゴリズムは、原理は同じである、最も基本的なアルゴリズムは、前方に分け、逆れる中国の自然言語処理のマッチングアルゴリズムです。
最大一致する単語のための右のスキャン左から名付け前方に最大マッチングアルゴリズムは、イタリアと思います。
見つからない場合はまず、私たちは言葉、現在のワード長を探していると、辞書に単語を一致させるようになった各スキャンの最大長を指定することができ、それはあなたが見つけるか、言葉になるまで探し続けるの長さを短くします。
以下は、詳細な紹介を見てみるために、言ってあまり話をしませんでした。
例:
S1 =「もちろん、計算言語学3時間であり、」設定された最大ワード長のMaxLen = 5、S2 =「」
[計算言語学]、[コース]、[時間]:辞書には三つの言葉が含まれています
(1)S2="";S1不为空,从S1左边取出候选子串W="计算语言学";
(2)查词表,“计算语言学”在词表中,将W加入到S2中,S2=“计算语言学/ ”, 并将W从S1中去掉,此时S1="课程是三个课时";
(3)S1不为空,于是从S1左边取出候选子串W="课程是三个";
(4)查词表,W不在词表中,将W最右边一个字去掉,得到W="课程是三";
(5)查词表,W不在词表中,将W最右边一个字去掉,得到W="课程是";
(6)查词表,W不在词表中,将W最右边一个字去掉,得到W="课程"
(7)查词表,W在词表中,将W加入到S2中,S2=“计算语言学/ 课程/ ”,并 将W从S1中去掉,此时S1="是三个课时";
(8)S1不为空,于是从S1左边取出候选子串W="是三个课时";
(9)查词表,W不在词表中,将W最右边一个字去掉,得到W="是三个课";
(10)查词表,W不在词表中,将W最右边一个字去掉,得到W="是三个";
(11)查词表,W不在词表中,将W最右边一个字去掉,得到W="是三"
(12)查词表,W不在词表中,将W最右边一个字去掉,得到W=“是”,这时 W是单字,将W加入到S2中,S2=“计算语言学/ 课程/ 是/ ”,并将 W从S1中去掉,此时S1="三个课时";
(13)S1不为空,从S1左边取出候选子串W="三个课时";
(14)查词表,W不在词表中,将W最右边一个字去掉,得到W="三个课";
(15)查词表,W不在词表中,将W最右边一个字去掉,得到W="三个";
(16)查词表,W不在词表中,将W最右边一个字去掉,得到W=“三”,这时 W是单字,将W加入到S2中,S2=“计算语言学/ 课程/ 是/ 三/ ”,并 将W从S1中去掉,此时S1="个课时";
(17)S1不为空,从S1左边取出候选子串W="个课时";
(18)查词表,W不在词表中,将W最右边一个字去掉,得到W="个课";
(19)查词表,W不在词表中,将W最右边一个字去掉,得到W=“个”, 这时W是单字,将W加入到S2中,S2=“计算语言学/ 课程/ 是/ 三/ 个/ ",并将W从S1中去掉,此时S1="课时";
(20)S1不为空,从S1左边取出候选子串W="课时";
(21)查词表,W在词表中,将W加入到S2中,S2=“计算语言学/ 课程/ 是/ 三/ 个/ 课时/ ",并将W从S1中去掉,此时S1=""。
(22)S1为空,输出S2作为分词结果,分词过程结束。
Pythonはこの言語を選ぶ理由として?私は周りの少ない人々を使用して、私は突破を試してみたかったが、基本的には限りおなじみとして、この事言語のプログラミングが、私は、ミンチ言葉、私のC / C ++、Javaおよび使用それほど多くはない高レベルの言語をしませんおそらくので、 、他の人が学ぶこと熱望しているが、私は単純に、この言語を使用する、のpythonに甘さを味わいました。
Pythonで実装中国の単語分割アルゴリズム:
スクリプトは、2つのパラメータを受け入れ、1は、入力ファイルパスで他の辞書のパスです。
これは次のように実行します:
python max-match.py <data> <dict>
#!/usr/bin/env python
import cPickle as pickle
import sys
# 词语最大长度为5
window_size=5
def max_match_segment(line, dic):
# write your code here
chars = line.decode("utf8")
words = []
idx = 0
# 判断索引是否超过chars的长度
while idx < len(chars):
matched = False
for i in xrange(window_size, 0, -1):
cand=chars[idx:idx+i].encode("utf8")
if cand in dic:
words.append(cand)
matched = True
break
# 判断for中是否匹配到数据
if not matched:
i = 1
words.append(chars[idx].encode("utf8"))
idx += i
return words
if __name__=="__main__":
try:
fpi=open(sys.argv[1], "r")
except:
print >> sys.stderr, "failed to open file"
sys.exit(1)
try:
dic = pickle.load(open(sys.argv[2], "r"))
except:
print >> sys.stderr, "failed to load dict %s" % sys.argv[2]
sys.exit(1)
try:
fpo = open("out.txt","w")
except:
print >> sys.stderr, "failed to load out.txt"
sys.exit(1)
for line in fpi:
fpo.write("\t".join( max_match_segment(line.strip(), dic) ))
もちろん、これは唯一の最も基本的で、あなたもトライバージョン管理の最大のワード長などに、例えば、高度な最適化の多くを持つことができます。
、そして最終的に公共機関[プログラマ]の数では良い評判をお勧めする方法多くのより多くのコンテンツ、古いタイマー、スキルを学習体験、インタビューのスキル、職場体験や他のシェアを学習がたくさんある、より多くの我々は慎重に準備ゼロベース毎日、実際のプロジェクトデータの入門情報は、Pythonプログラマの技術のタイミングを説明、および方法は、細部に注意を払う必要があるいくつかの学習を共有します