1

ファイル1のファイルごとに1行含まれるヒンディー語を検索し、ファイル2の行でそれらを見つけようとしています。見つかった単語数で行番号を出力する必要があります。これはコードです:

import codecs

hypernyms = codecs.open("hindi_hypernym.txt", "r", "utf-8").readlines()
words = codecs.open("hypernyms_en2hi.txt", "r", "utf-8").readlines()
count_arr = []

for counter, line in enumerate(hypernyms):
    count_arr.append(0)
    for word in words:
        if line.find(word) >=0:
            count_arr[counter] +=1

for iterator, count in enumerate(count_arr):
if count>0:
    print iterator, ' ', count

これはいくつかの単語を見つけていますが、他のいくつかを無視しています 入力ファイルは次のとおりです: ファイル-1:

पौधा  
वनस्पति

ファイル-2:

वनस्पति, पेड़-पौधा  
वस्तु-भाग, वस्तु-अंग, वस्तु_भाग, वस्तु_अंग  
पादप_समूह, पेड़-पौधे, वनस्पति_समूह  
पेड़-पौधा

これにより、次の出力が得られます。

0 1  
3 1

明らかに、それは वनस्पति を無視し、 पौधा のみを検索しています。他の入力でも試しました。1 つの単語のみを検索します。これを修正する方法はありますか?

4

3 に答える 3

1

問題はここにあると思います:

words = codecs.open("hypernyms_en2hi.txt", "r", "utf-8").readlines()

.readlines()は最後に改行を残すため、 पौधा を検索しているのではなく、 を検索していて、行末でपौधा\nのみ一致します。.read().split()代わりに使用すると、

0   2
2   1
3   1
于 2012-04-07T10:59:03.397 に答える
0

このコードを入力すると、スペースが原因でその理由がわかります。ファイル 1 では、最初の単語は पौधा[space].... です。

for i in hypernyms:
    print "file1",i

for i in words:
    print "file2",i

count_arr = [] の後、counter の前、行...

于 2012-04-07T11:33:58.233 に答える
0

これは、行末の「\n」文字を削除していないためです。したがって、「some_pattern」ではなく「some_pattern\n」を検索しません。strip() 関数を使用して、次のように切り捨てます。

import codecs

words = [word.strip() for word in codecs.open("hypernyms_en2hi.txt", "r", "utf-8")]
hypernyms = codecs.open("hindi_hypernym.txt", "r", "utf-8")
count_arr = []

for line in hypernyms:
    count_arr.append(0)
    for word in words:
        count_arr[-1] += (word in line)

for count in enumerate(count_arr):
    if count:
        print iterator, ' ', count
于 2012-04-07T11:20:11.017 に答える