Каких слов не хватает в орфографическом словаре?

Автор Рыбка Рио, 15 июня 2010, 10:57

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

Рыбка Рио

Если бы компьютерный сленг был бы установлен и включен в менеджере расширений, то он работал бы всегда для любого русского текста одновременно с обычным (базовым) словарём. Как в линуксе есть ядро, а есть модули, так и у словаря - есть ядро, а есть модули - фамилии, имена, названия, медицинкие термины и названия лекарств и т.д. Сейчас пока всё запихнуто в один словарь, из-за чего с одной стороны в нём многого нет, а с другой стороны он уже и так слишком большой.
ubuntu 12.04 + LibO3.6.0

dr.Faust

#31
2 Трио
Вы пытались измерить прирост производительности с укороченным словарём?

На мой взгляд необходимо создать два словаря - ядро и максимальный с включением всех лексем и замерить скорость обращения к нему (могу заняться) и потом, видя реальные цифры думать о том, что нам даст такая схема.
Свобода информации - свобода личности!

Рыбка Рио

Да, было бы интересно проверить. Если кто-то может, проверьте пожалуйста два случая.

I. dict_ru-ВСЕ-koi8-0.1.1 VS. dict_ru-ВСЕ-utf8-0.1.0

Первые два вложения - абсолютно одинаковы словари (в них есть всё), но отличаются только кодировками (кстати, словарь в utf-8 весит 3,3 МБ против 1,9 МБ koi8-r).

II. dict_ru-БЗА-koi8-0.1.2+dict_ru-ААА-koi8-0.0.1 VS. dict_ru-ВСЕ-koi8-0.1.1

Вторые два вложения - словарь без А и словарь с А - их нужно устанавливать вместе и сравнивать с dict_ru-ВСЕ-koi8-0.1.1.

[вложение удалено Администратором]

[вложение удалено Администратором]
ubuntu 12.04 + LibO3.6.0

dr.Faust

#33
Мне немного затруднительно устанавливать и удалять словари - на работе аврал - сильно мешает перфоратор :(
Но вот такой код он надолбить не мешает:
Sub SynWrt
Dim vDictionary As Object
Dim vLocal  As Object
Dim fg As Object
' Создаём службу тезауруса


vDictionary = createUnoService("com.sun.star.linguistic2.SpellChecker")
' от жешь я ленивый...
vLocal = vDictionary.Locales(0)
vLocal.Language = "ru"
vLocal.Country = "RU"
vLocal.Variant = ""
Dim aWords() As String
Dim aW As String
Dim i As Long
aWords = Array("Мы","толькотолько","организоались.","Четре","мсяца","как","сйт","запустили","piateparty","В","апеле","была","конференция","пиратких","партий","в","Брюсселе","(22","организации,","в","том","числе","две","от","СНГ","—","Россия","и","Казахстан),","нас","приняли","в","своеобразный","альянс","(за","создание","PP","International","проголосовали","17).","Для","нас","организовали","прямую","трансляцию","с","возможностью","голосовать.","Я,","просто","в","качестве","представителя","Каахстана","—","меня","еще","никто","не","выбрал,","поскольку","не","прошло","специалного","собания,","поэтому","никакой","официальной","должости","нет","Если","бы","компьютрный","сленг","был","бы","устанвлен","и","включн","в","менедере","расширеий,","то","он","рабтал","бы","всегда","для","любого","русского","текста","одновременно","с","обычным","(базовым)","словарём.","Как","в","линуксе","есть","ядро,","а","есть","модули","так","и","у","словаря","-","есть","ядро,","а","есть","модули","-","фамилии","имн","нзвания,","медцинкие","термины","и","названия","лекарств","и","т.д.","Сейчас","пока","всё","запихнуто","в","один","слварь,","изза","чего","с","одной","стороны","в","нём","мнгого","нет,","а","с","другй","стороы","он","уже","и","так","слишком","большой")

Dim res As Long
res = GetSystemTicks()
For i=0 To 3 ' число проходов
For Each aW In aWords
fg = vDictionary.spell (aW, vLocal, Array())
Next
Next
print GetSystemTicks() - res
End Sub

Время можно уменьшить уменьшая число проходов.
Результат - чем меньше, тем лучше.
Свобода информации - свобода личности!

dr.Faust

Лучше делать несколько прогонов и не учитывать результат  первого - кэш там всякий и всё, такое...
Свобода информации - свобода личности!

Рыбка Рио

Вот такие результаты на Windows XP SP2 + Celeron 400МГц + 256 ОЗУ +OOo3.2.1


            +------------+------------+------------+------------+------------+
            |            |            |dict_ru-БЗА-|            |            |
            |dict_ru-ВСЕ-|dict_ru-ВСЕ-|koi8-0.1.2+ |dict_ru-БЗА-|dict_ru-ААА-|
            | koi8-0.1.1 |utf8-0.1.0  |dict_ru-ААА-|koi8-0.1.2  |koi8-0.0.1  |
            |            |            |koi8-0.0.1  |            |            |
+-----------+------------+------------+------------+------------+------------+
|1-ый проход|   109537   |   224373   |   111790   |   112172   |   13490    |
|           |            |            |   111030   |            |            |
+-----------+------------+------------+------------+------------+------------+
|2-ой проход|   106443   |   222700   |   104420   |   109257   |   13690    |
|           |            |            |   107945   |            |            |
+-----------+------------+------------+------------+------------+------------+


Сразу вывод: словари на Windows+OOo в кодировке UTF-8 ужасно медленные. Словарь из одной лишь буквы А содержит 4231 , а всего в полном словаре было 146263 . Файлы aff везде были одинаковые.
ubuntu 12.04 + LibO3.6.0

Рыбка Рио

Ubuntu 10.04+Celeron 1600МГц+2ГБ ОЗУ+OOo3.2.1

            +------------+------------+-------------+------------+------------+
            |dict_ru-ВСЕ-|dict_ru-ВСЕ-|dict_ru-БЗА- |dict_ru-БЗА-|dict_ru-ААА-|
            |koi8-0.1.1  |utf8-0.1.0  |koi8-0.1.2   |koi8-0.1.2  |koi8-0.0.1  |
            |            |            |+dict_ru-ААА-|            |            |
            |            |            |koi8-0.0.1   |            |            |
+-----------+------------+------------+-------------+------------+------------+
|1-ый проход|35296       |42325       |35848        |36016       |3944        |
+-----------+------------+------------+-------------+------------+------------+
|2-ой проход|35424       |42581       |35334        |35761       |3667        |
+-----------+------------+------------+-------------+------------+------------+
|3-ий проход|35209       |42130       |35534        |35743       |3657        |
+-----------+------------+------------+-------------+------------+------------+
ubuntu 12.04 + LibO3.6.0

Yakov

Цитата: Трио от 16 июня 2010, 16:18
Сразу вывод: словари на Windows+OOo в кодировке UTF-8 ужасно медленные.
И для Linux будет то же самое,
вот что об этом говорит документация:
Цитировать
В не UTF-8 кодировках Hunspell работает с обычными восьмибитными кодировками, но со словарём и файлом аффиксов, кодированными в UTF-8, Hunspell использует гибридный тип работы со строками и проверкой аффиксов для поддержки Unicode:
Аффиксы и слова хранятся в UTF-8, во время анализа они, по большей части, обрабатываются в UTF-8, а при проверке условий и предложений конвертируются в UTF-16.

Yakov

Видимо, и регистр букв, в котором задаётся название кодировки имеет значение.
Он оказывает влияние на то, каким образом будет обрабатываться слова с заглавными буквами.
(например koi8-r  и KOI8-R).

Рыбка Рио

Спасибо. Кстати, медицинский словарь - UTF-8. Там комментарий уже есть про это.
ubuntu 12.04 + LibO3.6.0

Рыбка Рио

Кстати, в медицинском словаре встречаются греческие символы, так что там возможно без UTF не обойтись? Тогда тем более этот словарь, наверное, лучше отделять от основного (основной будет в koi8-r, а медицинский в UTF).
ubuntu 12.04 + LibO3.6.0

dr.Faust

Итак, если сложность поиска растёт линейно, можно предположить, что каждые 5 слов в словаре, это где-то миллисекунда поиска.
Но сложность поиска растёт не линейно, а как... а как, собственно? Кто-нибудь помнит?
Валера?!!!
Хелп нам!
Свобода информации - свобода личности!

PiVV

Я думаю стоит ещё попробовать тесты на системе с большим объёмом оперативной памяти. Плюс ещё попробовать увеличить число в первой строке файла dic. Плюс интересно сравнить объединение абсолютно разных словарей - не только кодировки отличаются, а и правила в аффикс файлах.

Рыбка Рио

Словарь сокращений будет, наверное, работать очень быстро, т.к. у него будет пустой или почти пустой файл aff. Главный положительный вывод, мне кажется, это то, что словарь из двух файлов практически равен по производительности словарю из одного файла. Если оптимизировать файлы aff для разных отдельных словарей, то мы получим большее число слов при той же производительности (?). И видимо, скорость работы словаря во многом определяется сложностью файла aff (?)
ubuntu 12.04 + LibO3.6.0

dr.Faust

Хм...
А как можно оптимизировать aff?

И вот ещё - мы имеем упорядоченную базу слов, это значит, что сложность поиска растёт медленнее чем линейно - вполне возможно что большой и очень большой словари, будут иметь почти одинаковую скорость обработки, несмотря на то, что маленький и большой будут отличаться  сильно.
Свобода информации - свобода личности!