Как в awk прочитать словарь и заменить слова в файле? - PullRequest
0 голосов
/ 20 января 2019

У нас есть исходный файл («source-A»), который выглядит следующим образом (если вы видите синий текст, это происходит из stackoverflow, а не из текстового файла):

The container of white spirit was made of aluminium.
We will use an aromatic method to analyse properties of white spirit.
No one drank white spirit at stag night.
Many people think that a potato crisp is savoury, but some would rather eat mashed potato.
...
more sentences

Каждое предложение в "source-A "находится на отдельной строке и оканчивается новой строкой (\ n)

У нас есть файл словаря / преобразования (" converse-B "), который выглядит следующим образом:

aluminium<tab>aluminum
analyse<tab>analyze
white spirit<tab>mineral spirits
stag night<tab>bachelor party
savoury<tab>savory
potato crisp<tab>potato chip
mashed potato<tab>mashed potatoes

"converse-B" - файл с двумя вкладками, разделенный табуляцией.Каждая карта эквивалентности ( член слева) <tab> член справа ) находится на отдельной строке и заканчивается новой строкой (\ n)

Как прочитать «converse-B» и заменить термины в «source-A», где термин в «reverse-B» column-1 заменяется термином в column-2, а затем записать в выходной файл («output»-C ")?

Например," output-C "будет выглядеть следующим образом:

The container of mineral spirits was made of aluminum.
We will use an aromatic method to analyze properties of mineral spirits.
No one drank mineral spirits at bachelor party.
Many people think that a potato chip is savory, but some would rather eat mashed potatoes.

Сложная часть - это термин potato.

Если«простое» решение awk не может обрабатывать единичный термин (картошка) и во множественном числе (картошка), мы будем использовать метод ручной замены.Решение awk может пропустить этот вариант использования.

Другими словами, решение awk может предусматривать, что оно работает только для однозначного слова или термина, состоящего из разделенных пробелом однозначных слов.

Решение awk даст нам 90% -ную степень завершения;оставшиеся 10% мы сделаем вручную.

1 Ответ

0 голосов
/ 21 января 2019

sed, вероятно, подходит лучше, так как это только замена фразы / слова.Обратите внимание, что если одни и те же слова встречаются в нескольких фразах, то «первым пришел - первым обслужен»;поэтому измените порядок словаря соответствующим образом.

$ sed -f <(sed -E 's_(.+)\t(.+)_s/\1/\2/g_' dict) content

The container of mineral spirits was made of aluminum.
We will use an aromatic method to analyze properties of mineral spirits.
No one drank mineral spirits at bachelor party.
Many people think that a potato chip is savory, but some would rather eat mashed potatoes.
...
more sentences

заменитель файла sed оператор преобразует словарные записи в выражения sed, а основной sed использует их для замены содержимого.

NB: Обратите внимание, что сценарий качество продукции должен учитывать регистры слов, а также границы слов, чтобы исключить нежелательную замену подстрок, которые здесь игнорируются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...