0

編集中のスワヒリ語コーパスで頻度分析を計算しようとしています。現時点では、これは私が持っているものです:

import os
import sys
from collections import Counter
import re


path = 'C:\Python27\corpus\\'
cnt = Counter()
listing = os.listdir(path)
for infile in listing:
    print "Currently parsing: " + path + infile
    corpus = open(path+infile, "r")
    for lines in corpus:
        for words in lines.split(' '):
            if len(words) >= 2 and re.match("^[A-Za-z]*$", words):
                words = words.strip()
                cnt[words] += 1
    print "Completed parsing: " + path + infile
    #output = open(n + ".out", "w")
    #print "current file is: " + infile

    corpus.close()
    #output.close()
for (counter, content) in enumerate(cnt.most_common(1000)):
    print str(counter+1) + " " + str(content)

したがって、このプログラムは、指定されたパス内のすべてのファイルを繰り返し処理し、各ファイルのテキストを読み取り、最も頻繁に使用される 1000 の単語を表示します。問題は次のとおりです。スワヒリ語は膠着語です。つまり、時制、因果関係、仮定法、前置詞などを伝えるために、接尾辞、接尾辞、接頭辞が単語に追加されます。

したがって、「する」を意味する「-fanya」のような動詞の語根は、nitakufanya - 「私はあなたをするつもりです.」になる可能性があります。その結果、この頻度リストは、「for」、「in」、「out」など、前述の中置辞を使用しない接続語に偏っています。

「ニタクファニャ」や「ツナファニャ」などの単語を見て、「ファンヤ」という単語を合計に含める簡単な方法はありますか?

いくつかの潜在的な注意事項:

  1. 動詞の語根は単語の最後になります
  2. 単語の先頭にある主語マーカーは、次のいずれかです。私たち)、'm' (皆さん)
  3. 主語マーカーの後には、次のいずれかのテンス マーカーが続きます: 'na' (現在)、'li' (過去)、'ta' (未来)、'ji' (再帰)、'nge' (条件付き)

ありがとう

4

2 に答える 2

0

できるよ:

root_words = [re.sub(
    '^(ni|u|a|wa|tu|m)(na|li|ta|ji|nge)',
    '', x) for word in words]

各単語から接頭辞を削除しますが、ルート単語がこれらのシーケンスで始まる場合、できることはあまりありません。

于 2012-07-31T01:47:42.343 に答える
0

まず、プレフィックスを気にせずに周波数分析を行います。次に、頻度リストからプレフィックスを修正します。これを簡単に行うには、単語に基づいてリストを並べ替え、同じ接頭辞を持つ単語が隣り合うようにします。これにより、手作業での剪定も非常に簡単になります。

于 2012-07-31T01:33:18.920 に答える