Форум поддержки пользователей LibreOffice, Apache OpenOffice

Главная категория => Общее => Тема начата: gabix от 30 марта 2023, 17:11

Название: Как LibreOffice определяет предлагаемые языки для проверки?
Отправлено: gabix от 30 марта 2023, 17:11
Нередкая ситуация: язык текста установлен неправильно, всё подчёркнуто красным, но LibreOffice предлагает два довольно удобных инструмента, а именно контекстное меню Set Language for Selection / Set Language for Paragraph и селектор языка в строке состояния. Появляющиеся списки динамические, состав языков меняется, очевидно, по какому-то алгоритму. На странице документации по выбору языка текста (https://help.libreoffice.org/latest/ru/text/shared/guide/language_select.html) это поведение не описано и, соответственно, нет и намёка на ответ на следующий вопрос: а как именно LO определяет, какие языки предложить на выбор?

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

P. S. Где Гугл, знаю, туда ходил, ничего не нашёл (https://www.google.com/search?q=How+does+LibreOffice+suggest+language+for+misspelled+words+context+menu).

P. P. S. LO 7.4.3.2 / locale ru-RU (ru_RU); UI: en-US.
Название: От: Как LibreOffice определяет предлагаемые языки для проверки?
Отправлено: mikekaganski от 30 марта 2023, 17:12
https://bugs.documentfoundation.org/show_bug.cgi?id=139185#c4
Название: От: Как LibreOffice определяет предлагаемые языки для проверки?
Отправлено: gabix от 30 марта 2023, 17:26
Это было молниеносно, спасибо! Я правильно понимаю, что для улучшения подбора языков единственным вариантом является изменение libexttextcat? Не судьба, видимо :-(
Название: От: Как LibreOffice определяет предлагаемые языки для проверки?
Отправлено: mikekaganski от 30 марта 2023, 17:34
:) Просто любимая мозоль (у меня ног не хватает на все любимые мозоли).

Как я там написал - лучше этот "подбор" вообще убрать: он хромает на все конечности. Библиотека просто нерабочая.
Название: От: Как LibreOffice определяет предлагаемые языки для проверки?
Отправлено: gabix от 30 марта 2023, 17:42
По моему ограниченному опыту, хромает только на белорусскую конечность. Русский или, скажем, украинский предлагаются к месту :-)

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

Файлы \langclass\LM\<код языка>.lm — это что? Исходя из какого принципа/правила/озарения от высших сил они составлены? Я вижу в них какие-то отдельные буквы или довольно странные последовательности. Причём конкретно для белорусского есть и чужие (русские) типа ече (такое в белорусском невозможно!). Возможно, из-за этого определение белорусского языка плохо работает?
Название: От: Как LibreOffice определяет предлагаемые языки для проверки?
Отправлено: greenman от 31 марта 2023, 07:33
Цитата: mikekaganski от 30 марта 2023, 17:34Как я там написал - лучше этот "подбор" вообще убрать

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

(достало это меня, в русско-английских текстах; хорошо, что тему подняли, я то всё думал — что-то у меня лыжи не едут...)
Название: От: Как LibreOffice определяет предлагаемые языки для проверки?
Отправлено: mikekaganski от 31 марта 2023, 10:00
Угадыватель был создан в рамках GSoC 2006 (https://developers.google.com/open-source/gsoc/2006#openoffice.org). Его интеграция в OOo мониторилась в i#73173 (https://bz.apache.org/ooo/show_bug.cgi?id=73173). Там есть и ссылки на спецификацию.

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

https://git.libreoffice.org/libexttextcat

Исходная теория - в https://web.archive.org/web/20061107015218/http://www.novodynamics.com/trenkle/papers/sdair-94-bc.ps.gz (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).
Название: От: Как LibreOffice определяет предлагаемые языки для проверки?
Отправлено: greenman от 31 марта 2023, 11:35
Цитата: mikekaganski от 31 марта 2023, 10:00В качестве хака - уберите (переименуйте) <LibreOffice Install Directory>/share/fingerprint

Не смог найти

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

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

/usr/lib/libexttextcat-2.0.so
Название: От: Как LibreOffice определяет предлагаемые языки для проверки?
Отправлено: mikekaganski от 31 марта 2023, 11:37
Поищите, где у Вас в системе есть файл 'ru.lm'
Название: От: Как LibreOffice определяет предлагаемые языки для проверки?
Отправлено: greenman от 31 марта 2023, 14:22
/usr/share/libexttextcat/ru.lm
Название: От: Как LibreOffice определяет предлагаемые языки для проверки?
Отправлено: mikekaganski от 31 марта 2023, 15:06
Значит, попробуйте удалить libexttextcat
Название: От: Как LibreOffice определяет предлагаемые языки для проверки?
Отправлено: greenman от 2 апреля 2023, 03:57
Попробовал. Офис вылетает при щелчке ПКМ на слове с красным волнистым подчеркиванием.
terminate called after throwing an instance of 'com::sun::star::uno::DeploymentException'
Название: От: Как LibreOffice определяет предлагаемые языки для проверки?
Отправлено: sokol92 от 2 апреля 2023, 16:26
Цитата: mikekaganski от 31 марта 2023, 11:37Поищите, где у Вас в системе есть файл 'ru.lm'
У меня *.lm файлы находятся в каталоге "C:\Program Files\LibreOffice\share\fingerprint".
Может быть, вместо удаления каталога изменить настроечный файл fpdb.conf (в том же каталоге), оставив в нем только "нужные" языки в разумном порядке?
Название: От: Как LibreOffice определяет предлагаемые языки для проверки?
Отправлено: greenman от 3 апреля 2023, 06:21
Файл конфигурации в моём случае здесь
/usr/share/libexttextcat/fpdb.conf
но изменять его прямо в /usr не по канону.

Не смог найти, как правильно в данном случае.
По аналогии сделал вот такой файл, буду наблюдать.
$ cat /etc/libexttextcat/fpdb.conf
en.lm      en--utf8
ru.lm      ru--utf8
de.lm      de--utf8
Название: От: Как LibreOffice определяет предлагаемые языки для проверки?
Отправлено: greenman от 3 апреля 2023, 07:48
Проверил. Ни в /etc/libexttextcat/, ни просто в /etc конфигурация fpdb.conf не работает.

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

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