LINUX.ORG.RU

Libre Office - как научить обрабатывать дореформенную орфографию?

 , , ,


0

2

Имеются сканы книг с дореформенной орфографией. После того кривого распознавания (которое обычно и происходит после скана в плохом разрешении, особенно если сама печать была далёкой от совершенной) всё-таки возникает вопрос: по какому алгоритму переводить дореформенный текст в современный? Удобно пользоваться пунктом в Libre Office «найти и заменить» и попросту менять окончания с ъ во всём тексте. Но! так нужно делать с КАЖДЫМ новым сканом. Вопрос: кто как решает проблему? Можно ли какой-то алгоритм вбить, чтобы каждый раз с этими ъ не возиться?

«найти и заменить» и попросту менять окончания с ъ во всём тексте.

Я так с ү на ұ менял

Deleted ()
Ответ на: комментарий от Synthez

Используй регулярные выражения.

anonymous ()

Можно написать простой скриптъ

#!/bin/sh

sed -e 's/ѣ/е/g' -e 's/і/и/g' -e 's/ѳ/ф/g' -e 's/ѵ/и/g' -e 's/\Bъ//g'

Запускать въ консолькѣ какъ:

./dorev <input.txt> output.txt

Съ помощью тѣхъ же регулярныхъ выраженій можно сдѣлать постобработку, дабы автоматически вычистить всякія -ія, -ыя, разс- и пр. особенности. При большомъ желаніи, навѣрное изъ этого можно сдѣлать и плагинъ къ либрѣ

petrosyan ★★★★★ ()

Посмотрите на плагин AltSearch, если правильно путаю, у него можно в одно действие вписать пачку замен.

bormant ★★★★★ ()
Ответ на: комментарий от Synthez

В либре очень легко делается макрос.

Нажимаете кнопочку «записать макрос». Делаете все замены которые нужны с галочкой «заменять автоматом». Потом остановить запись макроса. И на панельке либры делаете кнопочку выполнить макрос и ссылаетесь на него.

С новым файлом все просто. открыл файл. Нажал эту волшебную кнопочку. Все само заменилось. Сохранил и закрыл.

:)

anonymous ()

Кстати, помню на форуме Инфра-Ресурса (community.i-rs.ru) подобную задачу уже решал кто-то, там был приличный набор замен, я в той теме точно отметился :-), можно попробовать разыскать ее на web.archive.org/

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

bormant ★★★★★ ()
Последнее исправление: bormant (всего исправлений: 1)
Ответ на: комментарий от bormant

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

Зачем с нуля?

Записал одно правило и поднялся на начало документа через кнопку «запись макроса», а остальные правила добавить по аналогу - этот кусок копируешь и меняешь только что на что меняешь уже в редакторе макросов.

anonymous ()
Ответ на: комментарий от petrosyan

Модифицированный вариант:

# Предварительные замены
s|\bонѣ\b|они|g 
s|\bОнѣ\b|Они|g 
s|\bОНѢ\b|ОНИ|g 
s|\bоднѣ|одни|g 
s|\bОднѣ|Одни|g 
s|\bОДНѢ|ОДНИ|g 

# Убираем лишние буквы
y|ѣіѳѵѢІѲѴ|еифиЕИФИ| 
s|ъ\b||g 
s|Ъ\b||g

# Заменяем приставки 
s|\bразс|расс|g 
s|\bРазс|Расс|g 
s|\bРАЗС|РАСС|g
s|без([цкшщхфпчст])|бес\1|g
s|через([цкшщхфпчст])|черес\1|g
s|чрез([цкшщхфпчст])|чрес\1|g
s|чрез([цкшщхфпчст])|чрес\1|g
s|Без([цкшщхфпчст])|Бес\1|g
s|Через([цкшщхфпчст])|Черес\1|g
s|Чрез([цкшщхфпчст])|Чрес\1|g
s|БЕЗ([ЦКШЩХФПЧСТ])|БЕС\1|g
s|ЧЕРЕЗ([ЦКШЩХФПЧСТ])|ЧЕРЕС\1|g 
s|ЧРЕЗ([ЦКШЩХФПЧСТ])|ЧРЕС\1|g

# Местоимения и окончания
s|\bея\b|ее|g 
s|\bЕя\b|Ее|g 
s|\bЕЯ\b|ЕЕ|g 
s|\bнея\b|нее|g 
s|\bНея\b|Нее|g 
s|\bНЕЯ\b|НЕЕ|g 
s|ъи|ы|g 
s|ЪИ|Ы|g 
s|ыя\b|ые|g 
s|ЫЯ\b|ЫЕ|g 
s|аго\b|ого|g 
s|АГО\b|ОГО|g 
s|ЯГО\b|ЕГО|g 
s|яго\b|его|g

# Исправляем возможные косяки после замены
s|Сантьего\b|Сантьяго|g 
s|САНТЬЕГО\b|САНТЬЯГО|g 
s|\bАрого\b|Араго|g 
s|\bАРОГО\b|АРАГО|g 
s|\bблого\b|благо|g 
s|\bБлого\b|Благо|g 
s|\bБЛОГО\b|БЛАГО|g 
s|\bимого\b|имаго|g 
s|\bИмого\b|Имаго|g 
s|\bИМОГО\b|ИМАГО|g 
s|\bлюмбого\b|люмбаго|g 
s|\bЛюмбого\b|Люмбаго|g 
s|\bЛЮМБОГО\b|ЛЮМБАГО|g 
s|\bТобого\b|Тобаго|g 
s|\bТОБОГО\b|ТОБАГО|g 
s|\bЧикого\b|Чикаго|g 
s|\bЧИКОГО\b|ЧИКАГО|g 

# Исправляем написание отдельных слов
s|\bитти|идти|g 
s|\bИтти|Идти|g 
s|\bИТТИ|ИДТИ|g 
s|\bтормаз|тормоз|g 
s|\bТормаз|Тормоз|g 
s|\bТОРМАЗ|ТОРМОЗ|g 
s|\bгаллере|галере|g 
s|\bГаллере|Галере|g 
s|\bГАЛЛЕРЕ|ГАЛЕРЕ|g 
s|\bкорридор|коридор|g 
s|\bКорридор|Коридор|g 
s|\bКОРРИДОР|КОРИДОР|g 
s|\bоффициал|официал|g 
s|\bОффициал|Официал|g 
s|\bОФФИЦИАЛ|ОФИЦИАЛ|g

Сохраняем как subst.sed и запускаем командой:

sed -r -f subst.sed input.txt > output.txt

Единственное, что таким способом нельзя сделать - это отличать окончания -ія у прилагательных от такого же окончания у существительных: ср., «русскія пѣсни» и «страна Фракія». Их или вручную править, или мутить алгоритм распознавания части речи с помощью hunspell

petrosyan ★★★★★ ()
Ответ на: комментарий от anonymous

Вы вообще когда-нибудь смотрели, что запишется таким образом? К чему портянка

dim args1(20) as new com.sun.star.beans.PropertyValue
args1(0).Name = "SearchItem.StyleFamily"
args1(0).Value = 2
...
args1(20).Name = "Quiet"
args1(20).Value = true

dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args1())
на каждый вызов вместо простого и понятного кода?

bormant ★★★★★ ()
Ответ на: комментарий от petrosyan

А если в середине слова будет ъ? Надо же только в конце, поэтому ъ$/е$

mystery ★★ ()
Ответ на: комментарий от mystery

лучше портянка, чем такой ужас

какой ужас, о чем речь?

bormant ★★★★★ ()
Ответ на: комментарий от mystery

Вместо той портянки куда лучше что-то вроде:

sub FromPeter
dim src() as String, dst() as String
dim oRep as Object, n as Long
  src = Array("ъ\>", "аго\>", ...)
  dst = Array("", "ого", ...)
  oRep = ThisComponent.createReplaceDescriptor()
  with oRep
    .SearchCaseSensitive = True
    .SearchRegularExpression = True
    .SearchAll = True
    for n = LBound(src()) to UBound(src())
      .SearchString = src(n)
      .ReplaceString = dst(n)
      ThisComponent.ReplaceAll(oRep)
    next
  end with
end sub

bormant ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.