Estoy buscando una herramienta simple que verifique la terminología del texto en función de una lista de reemplazo.
Ejemplo de una definición de reemplazo:
Texto de ejemplo:
Nuestra aplicación es compatible con el programa de recompensas.
Recomendaciones:
error: error de la aplicación
: programa de recompensas
Texto sugerido:
Nuestra aplicación es compatible con el programa de bonificación.
No encontrar:
error: programa
Tenga en cuenta cómo el software tiene que considerar plazos más largos sobre plazos cortos, de lo contrario habría demasiados falsos positivos.
Requisitos:
Ya he probado:
Aquí se explica cómo hacerlo en Python 3. Este programa tiene todas las funciones solicitadas, excepto el resaltado de color, porque la consola Win32 solo admite color a partir de la actualización Threshold 2 para Windows 10. La mayor parte de la complejidad del programa es para manejar el caso. de múltiples sugerencias.
import sys, re, collections
context_size = 30
defs_path, doc_path = sys.argv[1:]
defs = collections.defaultdict(list)
with open(defs_path, 'rt') as o:
for l in o:
bad, _, good = l.strip().partition(' -> ')
defs[bad].append(good)
with open(doc_path, 'rt') as o:
doc = o.read()
def replacement_f(m):
print('\nerror:', m.group())
candidates = defs[m.group()]
if len(candidates) == 1:
print('Replacing with:', candidates[0])
return candidates[0]
print('There are multiple possible replacements.')
print('Context:', re.sub(r'\s+', ' ', doc[
max(m.start() - context_size, 0) :
min(m.start() + context_size, len(doc))]))
print('Candidates:', dict(enumerate(candidates)))
while True:
n = input('Enter a number: ')
if n.isdigit() and int(n) < len(candidates):
return candidates[int(n)]
doc = re.sub(
'|'.join(re.escape(bad) for bad in
sorted(defs.keys(), key = len, reverse = True)),
replacement_f,
doc)
print('\nResult:\n')
print(doc)
Ahora suponga que tiene un archivo defs.txt
como este:
app -> application
program -> application
bounty program -> bonus program
supports -> can use
supports -> has support for
y un archivo input.txt
como este:
Our app supports the bounty program.
Si el programa de Python se llama script.py
, puede ejecutarlo con el comando:
python3 script.py defs.txt input.txt
El resultado se ve así:
error: app
Replacing with: application
error: supports
There are multiple possible replacements.
Context: Our app supports the bounty program.
Candidates: {0: 'can use', 1: 'has support for'}
Enter a number: 0
error: bounty program
Replacing with: bonus program
Result:
Our application can use the bonus program.
Codiólogo
Tomás Weller