Ich suche nach einem einfachen Tool, das Text anhand einer Ersetzungsliste auf Terminologie überprüft.
Beispiel für eine Ersetzungsdefinition:
Beispieltext:
Unsere App unterstützt das Prämienprogramm.
Ergebnisse:
Fehler: App-
Fehler: Kopfgeldprogramm
Textvorschlag:
Unsere Anwendung unterstützt das Bonusprogramm.
Nicht-Finden:
Fehler: Programm
Beachten Sie, dass die Software längere Laufzeiten über kurze Laufzeiten berücksichtigen muss, da es sonst zu viele Fehlalarme geben würde.
Anforderungen:
Ich habe bereits versucht:
So geht's in Python 3. Dieses Programm hat alle geforderten Features außer der Farbhervorhebung, weil die Win32-Konsole erst ab dem Threshold 2 Update für Windows 10 Farbe unterstützt. Der größte Teil der Komplexität des Programms liegt in der Fallbearbeitung von mehreren Vorschlägen.
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)
Angenommen, Sie haben eine Datei defs.txt
wie diese:
app -> application
program -> application
bounty program -> bonus program
supports -> can use
supports -> has support for
und eine Datei input.txt
wie diese:
Our app supports the bounty program.
Wenn das Python-Programm den Namen script.py
trägt, können Sie es mit dem folgenden Befehl ausführen:
python3 script.py defs.txt input.txt
Das Ergebnis sieht so aus:
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.
Kodiologe
Thomas Weller