разбиение слова на словарные лексемы
От: dad  
Дата: 24.10.19 06:57
Оценка:
Привет!
Подскажите, пожалуйста, наводку на наиболее приемистый алгоритм разбиения слова на заданные заранее слованые лексемы (например, слоги).
Веру-ю-у! В авиацию, в научную революци-ю-у, в механизацию сельского хозяйства, в космос и невесомость! Веру-ю-у! Ибо это объективно-о! (Шукшин)
Re: разбиение слова на словарные лексемы
От: dad  
Дата: 24.10.19 09:11
Оценка:
Здравствуйте, dad, Вы писали:

dad>Привет!

dad>Подскажите, пожалуйста, наводку на наиболее приемистый алгоритм разбиения слова на заданные заранее слованые лексемы (например, слоги).


имеется ввиду, что-то современное, помимо проходов с перебором слогов
Веру-ю-у! В авиацию, в научную революци-ю-у, в механизацию сельского хозяйства, в космос и невесомость! Веру-ю-у! Ибо это объективно-о! (Шукшин)
Re: разбиение слова на словарные лексемы
От: Pzz Россия https://github.com/alexpevzner
Дата: 26.10.19 17:11
Оценка:
Здравствуйте, dad, Вы писали:

dad>Подскажите, пожалуйста, наводку на наиболее приемистый алгоритм разбиения слова на заданные заранее слованые лексемы (например, слоги).


Заданные каким образом, перечислением?

Из любого такого перечисления можно построить регулярный конечный автомат, который разобъет слово на запчасти за время O(n), где n — длина слова.
Re[2]: разбиение слова на словарные лексемы
От: dad  
Дата: 26.10.19 17:34
Оценка:
Pzz>Из любого такого перечисления можно построить регулярный конечный автомат, который разобъет слово на запчасти за время O(n), где n — длина слова.


однопроходное разбиение на слоги? на каждую вариацию по автомату?
Веру-ю-у! В авиацию, в научную революци-ю-у, в механизацию сельского хозяйства, в космос и невесомость! Веру-ю-у! Ибо это объективно-о! (Шукшин)
Re[3]: разбиение слова на словарные лексемы
От: Pzz Россия https://github.com/alexpevzner
Дата: 26.10.19 17:36
Оценка:
Здравствуйте, dad, Вы писали:

Pzz>>Из любого такого перечисления можно построить регулярный конечный автомат, который разобъет слово на запчасти за время O(n), где n — длина слова.


dad>однопроходное разбиение на слоги? на каждую вариацию по автомату?


На каждый набор слогов.
Re[4]: разбиение слова на словарные лексемы
От: dad  
Дата: 26.10.19 18:13
Оценка:
dad>>однопроходное разбиение на слоги? на каждую вариацию по автомату?

Pzz>На каждый набор слогов.


а это разве не n*k получается? (k — число вариаций)
Веру-ю-у! В авиацию, в научную революци-ю-у, в механизацию сельского хозяйства, в космос и невесомость! Веру-ю-у! Ибо это объективно-о! (Шукшин)
Re[5]: разбиение слова на словарные лексемы
От: Pzz Россия https://github.com/alexpevzner
Дата: 26.10.19 18:25
Оценка:
Здравствуйте, dad, Вы писали:

Pzz>>На каждый набор слогов.


dad>а это разве не n*k получается? (k — число вариаций)


Что такое число вариаций?
Re[6]: разбиение слова на словарные лексемы
От: dad  
Дата: 26.10.19 19:58
Оценка:
Pzz>Что такое число вариаций?

набор слогов
Веру-ю-у! В авиацию, в научную революци-ю-у, в механизацию сельского хозяйства, в космос и невесомость! Веру-ю-у! Ибо это объективно-о! (Шукшин)
Re[7]: разбиение слова на словарные лексемы
От: Pzz Россия https://github.com/alexpevzner
Дата: 26.10.19 23:15
Оценка:
Здравствуйте, dad, Вы писали:

Pzz>>Что такое число вариаций?


dad>набор слогов


От количества слогов время работы автомата не зависит. Но от них зависит сложность самого автомата, и время его построения. Впрочем, если просто есть сколько-то фиксированных слогов, то автомат получится несложным (хоть и развесистым, если слогов в наборе много), и построить его можно быстро.

P.S. Насколько я понимаю, разбор слова на слоги для русского языка не сводится к разбиению слова на запчасти из списка запчастей.
Re[8]: разбиение слова на словарные лексемы
От: dad  
Дата: 27.10.19 06:31
Оценка:
zz>От количества слогов время работы автомата не зависит. Но от них зависит сложность самого автомата, и время его построения. Впрочем, если просто есть сколько-то фиксированных слогов, то автомат получится несложным (хоть и развесистым, если слогов в наборе много), и построить его можно быстро.

Pzz>P.S. Насколько я понимаю, разбор слова на слоги для русского языка не сводится к разбиению слова на запчасти из списка запчастей.



грамматика и не нужна. есть подстроки, есть строка да.
построение автомата — с этим наверно regexp с jit неплохо справляется.
а вот самостоятельное построение вызывает сомнение, что будет прям быстрее
чем рекурсивный перебор с возвратом.


на каком-то этапе начнется колонирование цепочек, а это тоже затраты, аллокации и обход.
такой обход даст все варианты сразу, но если, нужен только первый совпавший?
+ комбинаторный взрыв там. ну для меня не актуально — строки короткие.


пример на пятом шаге:

лексемы: a, ab, b, bc, c
строка: aabbbcc

a a b b b c
a a b b bc

a ab b b b с
a ab b b bс

a a b b b c
Веру-ю-у! В авиацию, в научную революци-ю-у, в механизацию сельского хозяйства, в космос и невесомость! Веру-ю-у! Ибо это объективно-о! (Шукшин)
Re[9]: разбиение слова на словарные лексемы
От: Pzz Россия https://github.com/alexpevzner
Дата: 27.10.19 11:43
Оценка:
Здравствуйте, dad, Вы писали:

dad>грамматика и не нужна. есть подстроки, есть строка да.

dad>построение автомата — с этим наверно regexp с jit неплохо справляется.

regexp с этим довольно плохо, на самом деле, справляется. Но у него и цели несколько другие, несколько выходящие за пределы того, что могут сделать регулярные автоматы в чистом виде.

dad>а вот самостоятельное построение вызывает сомнение, что будет прям быстрее

dad>чем рекурсивный перебор с возвратом.

Если грамматика задана просто перечислением возможных лексем, это тривиальный случай.
Re[10]: разбиение слова на словарные лексемы
От: dad  
Дата: 27.10.19 15:21
Оценка:
Pzz>Если грамматика задана просто перечислением возможных лексем, это тривиальный случай.

итого, собственно, токенайзер + вместо рекурсивного обхода — построение сразу всех цепочек.
но имеем более сложный алгоритм, аллокации и сомнительный выигрыш на коротких словах.
Веру-ю-у! В авиацию, в научную революци-ю-у, в механизацию сельского хозяйства, в космос и невесомость! Веру-ю-у! Ибо это объективно-о! (Шукшин)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.