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

在python文件中特定单词前后打印5个单词,python,nlp,Python,Nlp,我有一个包含其他文件夹的文件夹,这些文件夹包含一些文本文件。语言是波斯语。我想打印5个词前后关键字在他们中间的关键字。我写了代码,但它给出了行的开头和结尾的5个单词,而不是关键字周围的单词。我怎样才能修好它 提示:我只写了与上述问题相关的代码的结尾。代码的开头是关于打开和规范化文件的 def c (): y = "آرامش" text= normal_text(folder_path) # the first function to open and normalize the files f

我有一个包含其他文件夹的文件夹,这些文件夹包含一些文本文件。语言是波斯语。我想打印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])
我所期望的是这样的:

单词


每句话换一行。

您需要根据关键字索引获取单词索引。您可以使用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

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

试试这个。它分裂了文字。然后,它计算出显示之前和之后的金额,最小值为剩余多少,最大值为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])

如果关键字是第三个单词呢?我们之前是只输出3个,还是包括前几行的5个?在这种情况下,只输出3个谢谢大家。@suneye如果解决了您的问题,请接受下箭头下方带有灰色勾号的一个。当然,这里的所有答案都可以接受。感谢you@suneye如果您单击其中一个问题上的勾号,则会将问题标记为已解决
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])