Как LibreOffice определяет предлагаемые языки для проверки?

Автор gabix, 30 марта 2023, 17:11

0 Пользователи и 1 гость просматривают эту тему.

gabix

Нередкая ситуация: язык текста установлен неправильно, всё подчёркнуто красным, но LibreOffice предлагает два довольно удобных инструмента, а именно контекстное меню Set Language for Selection / Set Language for Paragraph и селектор языка в строке состояния. Появляющиеся списки динамические, состав языков меняется, очевидно, по какому-то алгоритму. На странице документации по выбору языка текста это поведение не описано и, соответственно, нет и намёка на ответ на следующий вопрос: а как именно LO определяет, какие языки предложить на выбор?

У меня очень часто возникает ситуация, когда неправильный (обычной русский) язык задан для белорусского. LO при этом предлагает, как правило, какую угодно херню типа русинского, башкирского или таджикского (слово «херня» относится, разумеется, не к языкам, а к самому факту), но только не собственно белорусский, хотя ни интерфейсы, ни модули проверки для этих языков не установлены, а для белорусского есть. Поэтому и возник указанный вопрос, а также вопрос: можно ли повлиять на это поведение? Буду благодарен, если кто-то ткнёт носом в подходящий ресурс.

P. S. Где Гугл, знаю, туда ходил, ничего не нашёл.

P. P. S. LO 7.4.3.2 / locale ru-RU (ru_RU); UI: en-US.

mikekaganski

С уважением,
Михаил Каганский

gabix

Это было молниеносно, спасибо! Я правильно понимаю, что для улучшения подбора языков единственным вариантом является изменение libexttextcat? Не судьба, видимо :-(

mikekaganski

:) Просто любимая мозоль (у меня ног не хватает на все любимые мозоли).

Как я там написал - лучше этот "подбор" вообще убрать: он хромает на все конечности. Библиотека просто нерабочая.
С уважением,
Михаил Каганский

gabix

По моему ограниченному опыту, хромает только на белорусскую конечность. Русский или, скажем, украинский предлагаются к месту :-)

Эх, доставать вопросами, так доставать!

Файлы \langclass\LM\<код языка>.lm — это что? Исходя из какого принципа/правила/озарения от высших сил они составлены? Я вижу в них какие-то отдельные буквы или довольно странные последовательности. Причём конкретно для белорусского есть и чужие (русские) типа ече (такое в белорусском невозможно!). Возможно, из-за этого определение белорусского языка плохо работает?

greenman

#5
Цитата: mikekaganski от 30 марта 2023, 17:34Как я там написал - лучше этот "подбор" вообще убрать

Не понял, что нужно сделать в итоге?  ???
Как нибудь бы попроще, мол стереть такой файл...

(достало это меня, в русско-английских текстах; хорошо, что тему подняли, я то всё думал — что-то у меня лыжи не едут...)

mikekaganski

#6
Угадыватель был создан в рамках GSoC 2006. Его интеграция в OOo мониторилась в i#73173. Там есть и ссылки на спецификацию.

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

https://git.libreoffice.org/libexttextcat

Исходная теория - в https://web.archive.org/web/20061107015218/http://www.novodynamics.com/trenkle/papers/sdair-94-bc.ps.gz (это не архив, а документ PS)

Кроме качества fingerprint, на надёжность угадывания естественно влияет также размер текста. Если речь идёт о статусбаре Writer, он угадывает по одному (текущему) слову (а уже подменю для абзаца будет работать по тексту всего абзаца). Угадывание языка по частоте букв и буквосочетаний в одном слове - это, извините, нечто большее чем глупость.

Цитата: greenman от 31 марта 2023, 07:33что нужно сделать в итоге?

В идеале - реализовать в программе возможность убрать эту службу вообще.
В качестве хака - уберите (переименуйте) <LibreOffice Install Directory>/share/fingerprint (скажем, в fingerprint.bak).
С уважением,
Михаил Каганский

greenman

Цитата: mikekaganski от 31 марта 2023, 10:00В качестве хака - уберите (переименуйте) <LibreOffice Install Directory>/share/fingerprint

Не смог найти

Вот что находится:

/usr/lib/libreoffice/program/libguesslanglo.so

/usr/lib/libexttextcat-2.0.so

mikekaganski

С уважением,
Михаил Каганский


mikekaganski

С уважением,
Михаил Каганский

greenman

Попробовал. Офис вылетает при щелчке ПКМ на слове с красным волнистым подчеркиванием.
terminate called after throwing an instance of 'com::sun::star::uno::DeploymentException'

sokol92

Цитата: mikekaganski от 31 марта 2023, 11:37Поищите, где у Вас в системе есть файл 'ru.lm'
У меня *.lm файлы находятся в каталоге "C:\Program Files\LibreOffice\share\fingerprint".
Может быть, вместо удаления каталога изменить настроечный файл fpdb.conf (в том же каталоге), оставив в нем только "нужные" языки в разумном порядке?
Владимир.

greenman

Файл конфигурации в моём случае здесь
/usr/share/libexttextcat/fpdb.conf
но изменять его прямо в /usr не по канону.

Не смог найти, как правильно в данном случае.
По аналогии сделал вот такой файл, буду наблюдать.
$ cat /etc/libexttextcat/fpdb.conf
en.lm      en--utf8
ru.lm      ru--utf8
de.lm      de--utf8

greenman

Проверил. Ни в /etc/libexttextcat/, ни просто в /etc конфигурация fpdb.conf не работает.

Исправил в /usr/share/libexttextcat/

(проверял, добавив в русский текст кусок текста на испанском. Теперь не предлагает Испанский язык)