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

这是查找一些单词,但忽略了其他一些输入文件是: File-1:

पौधा  
वनस्पति

文件 2:

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

这给出了输出:

0 1  
3 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

那是因为您没有删除行尾的“\n”字符。所以你不要搜索“some_pattern\n”,而不是“some_pattern”。使用 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 回答
0

输入此代码,您将看到为什么会发生这种情况,因为有空格:在文件 1 中,第一个单词是 पौधा[space]....

for i in hypernyms:
    print "file1",i

for i in words:
    print "file2",i

在 count_arr = [] 之后和计数器之前,行...

于 2012-04-07T11:33:58.233 回答