试图改进第一个答案,不需要在输入文件中突出显示短语(如果输入文件中存在任何单引号则不起作用):
用 uno.txt 试过:
gallina sparviero Mulo tonno ASINO maiale foca cavallo boa struzzo May May
peperone cipolla aglio cavolo oca gallo bue pippo mucca
due.txt:
pizza pasta tagliolini acciughe peperone burro oca cavolo baccala
pollo pizza pasta gamberi peperone uva cipolla grano
pesce gatto mulo ASINO verdura broccoli pippo hamburger formaggio panna
tre.txt:
pinguino leone mummia oca gallo levriero bassotto pecora capra
和prova.py:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Mon Dec 28 16:11:33 2020
@author: Pietro
"""
import glob
import os
import shlex
path = './'
words = ['pippo' ,'papera', 'asino', 'ciuchino' , 'peperone' ]
phrases =['oca gallo' , 'hamburger formaggio' ]
wordphrases = words + phrases
print('\n\nkeywords to search for : ',words)
print('\n\nphrases to search for : ',phrases,'\n\n')
print('\n\nword + phrases to search for : ',wordphrases,'\n\n')
context_d = {}
for filename in glob.glob(os.path.join(path, '*.txt')):
if filename.endswith('.txt'):
f = open(filename)
file = f.read()
for k in range(len(phrases)):
if phrases[k] in file:
print('frase : ',phrases[k], ' in ' , filename)
newfile = file.replace(phrases[k], ('\''+phrases[k]+'\''))
print(newfile)
# print('\nprinting file : \n\n'+file)
# txt = file.lower()
# print('++++++++hhhhhhhh++++++\n\n',file)
# txt = file.split()
txt = shlex.split(newfile)
# print('+++++++++++++++++++++++++++\n\n',txt)
txt = [item.replace('May', '') for item in txt] # locate and replace all months of May before lowering
#txt = list([[word.lower() for word in line.split()] for line in txt])
txt = (list(map(lambda x: x.lower(), txt)))
# print('\n\n printing txt : \n\n',txt,'\n\n')
for j in range(len(txt)):
# if (j + 3) < len(txt):
if txt[j] in wordphrases:
if txt[j] in context_d:
context_d[txt[j]] += txt[(j - 3):j]
context_d[txt[j]] += txt[(j + 1):(j + 4)]
else:
context_d[txt[j]] = txt[(j - 3):j]
context_d[txt[j]] += txt[(j + 1):(j + 4)]
for i in context_d:
context_d[i] = list(set(context_d[i]))
for i in context_d:
print('\nRISULTATO per ',i ,' : ','\n ', context_d[i],'\n\n')
当我运行时:
keywords to search for : ['pippo', 'papera', 'asino', 'ciuchino', 'peperone']
phrases to search for : ['oca gallo', 'hamburger formaggio']
word + phrases to search for : ['pippo', 'papera', 'asino', 'ciuchino', 'peperone', 'oca gallo', 'hamburger formaggio']
frase : oca gallo in ./uno.txt
gallina sparviero Mulo tonno ASINO maiale foca cavallo boa struzzo May May
peperone cipolla aglio cavolo 'oca gallo' bue pippo mucca
frase : oca gallo in ./tre.txt
pinguino leone mummia 'oca gallo' levriero bassotto pecora capra
frase : hamburger formaggio in ./due.txt
pizza pasta tagliolini acciughe peperone burro oca cavolo baccala
pollo pizza pasta gamberi peperone uva cipolla grano
pesce gatto mulo ASINO verdura broccoli pippo 'hamburger formaggio' panna
RISULTATO per asino :
['cavallo', 'pesce', 'tonno', 'foca', 'sparviero', 'broccoli', 'maiale', 'verdura', 'mulo', 'gatto', 'pippo']
RISULTATO per peperone :
['', 'struzzo', 'uva', 'burro', 'grano', 'acciughe', 'pizza', 'cipolla', 'gamberi', 'cavolo', 'tagliolini', 'pasta', 'oca', 'aglio']
RISULTATO per oca gallo :
['pecora', 'pinguino', 'leone', 'bue', 'mucca', 'mummia', 'cipolla', 'cavolo', 'pippo', 'bassotto', 'levriero', 'aglio']
RISULTATO per pippo :
['panna', 'hamburger formaggio', 'bue', 'mucca', 'broccoli', 'oca gallo', 'verdura', 'cavolo', 'asino']
RISULTATO per hamburger formaggio :
['broccoli', 'verdura', 'panna', 'pippo']
这是正确的行为吗?
这一次,当一个短语紧邻关键字时,它会被标记为要检索
但算作“1”位置,因此您在 a 旁边获得的不仅仅是 -3 +3 个字
关键字
让我知道它是否正确(肯定会有更好更快更pythonic的方式)。