在python中的文件中的特定单词之前和之后打印5个单词

时间:2016-07-11 17:24:00

标签: python nlp

我有一个包含其他文件夹的文件夹,这些文件夹包含一些文本文件。 (语言是波斯语)。我想在关键字前后打印5个单词,并在其中间打印关键字。我编写了代码,但它在行的开头和结尾给出了5个单词,而不是关键字周围的单词。我该如何解决?

提示:我只是写下与上述问题相关的代码的结尾。代码的开头是关于文件的打开和规范化。

def c ():
y = "آرامش"
text= normal_text(folder_path) # the first function to open and normalize the files
for i in text:
    for line in i:
        if y in line:
            z = line.split()
            print (z[-6], z[-5],
                   z[-4], z[-3],
                   z[-2], z[-1], y,
                   z[+1], z[+2],
                   z[+3], z[+4],
                   z[+5], z[+6])

我的期望是这样的:

单词单词单词关键词单词单词单词

新行中的每个句子。

3 个答案:

答案 0 :(得分:0)

您需要根据关键字的索引获取单词索引。您可以使用list.index()方法获取预期的索引,然后使用简单的索引来获取预期的单词:

for f in normal_text(folder_path):
    for line in f:
      if keyword in line:
          words = line.split()
          ins = words.index(keyword)
          print words[max(0, ind-5):min(ind+6, len(words))]

或者作为一种更优化的方法,您可以使用生成器函数来生成单词作为迭代器,在内存使用方面进行了非常优化。

def get_words(keyword):
    for f in normal_text(folder_path):
        for line in f:
            if keyword in line:
                words = line.split()
                ins = words.index(keyword)
                yield words[max(0, ind-5):min(ind+6, len(words))]

然后你可以简单地循环结果以进行打印等等。

y = "آرامش"
for words in get_words(y):
    # do stuff

答案 1 :(得分:0)

试试这个。它分裂了这些词。然后它计算前后显示的数量(剩下的最少数量,最多5个)并显示它。

words = line.split()
if y in words:
    index = words.index(y)
    before = index - min(index, 5)
    after = index + min( len(words) - 1 - index, 5) + 1    
    print (words[before:after])

答案 2 :(得分:-2)

def c():
    y = "آرامش"
    text= normal_text(folder_path) # the first function to open and normalize the files
    for i in text:
        for line in i:
            split_line = line.split()
            if y in split_line:
                index = split_line.index(y)
                print (' '.join(split_line[max(0,index-5):min(index+6,le
n(split_line))]))

假设关键字必须是一个确切的单词。