Я ищу простой инструмент, который бы проверял текст на терминологию на основе списка замены.
Пример замены определения:
Пример текста:
Наше приложение поддерживает программу вознаграждений.
Выводы:
ошибка: ошибка приложения
: программа вознаграждений
Предлагаемый текст:
Наше приложение поддерживает бонусную программу.
Не находит:
ошибка: программа
Обратите внимание, как программное обеспечение должно рассматривать более длительные сроки по сравнению с короткими, иначе было бы слишком много ложных срабатываний.
Требования:
Я уже пробовал:
Вот как это сделать в Python 3. Эта программа имеет все запрошенные функции, кроме выделения цветом, потому что консоль Win32 поддерживает цвет только с момента обновления Threshold 2 для Windows 10. Большая часть сложности программы связана с обработкой случая из нескольких предложений.
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)
Теперь предположим, что у вас есть такой файл defs.txt
:
app -> application
program -> application
bounty program -> bonus program
supports -> can use
supports -> has support for
и такой файл input.txt
:
Our app supports the bounty program.
Если программа Python называется script.py
, вы можете запустить ее с помощью команды:
python3 script.py defs.txt input.txt
Результат выглядит следующим образом:
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.
Кодиолог
Томас Веллер