powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / хочу странного (получение смежных основ словоформы)
25 сообщений из 27, страница 1 из 2
хочу странного (получение смежных основ словоформы)
    #39558622
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
назовем любую основу получаемую при "нормализации" фтс--пж заданной словоформы "прямой" основой (по данному словарю/конфе).

назовем смежной (на заданном словаре к ФТС--пж) с данной словоформой словоформу , имеющую ("порождающую при "нормализации") хотя бы одну общую основу.
Код: sql
1.
2.
3.
4.
select to_tsquery('russian_hunspell','мыла')
	,to_tsquery('russian_hunspell','мыть');
------
''мыло' | 'мыть'',''мыть''



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

задача:
найти способ получения (в пж) всех смежных* (через любую смежную словоформу) основ по заданной словоформе. т.е. для "мыть" это будет и "мыло" для ханспельного пж--словаря -- смежно через "мыла".

* -- по заданному словарю//конфигурации.

кто--нть решал ? подходы знает ?
или знает, почему так не надо делать ? (какого размера кластеры смежности можно огрести ?)
...
Рейтинг: 0 / 0
хочу странного (получение смежных основ словоформы)
    #39558687
Ы2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwq, какую задачу вы решаете? Может оказаться, что инструмент прямо перед глазами, но вы его не видите. Если вы ограничиваетесь конкретным хунспелловским словарем, может, вам хватит хунспелловских же wordforms, annalyze и компании.

Насчет терминов:
названное вами основой правильно именуется леммой (грубо говоря, словарная форма);

соответственно, «нормализация» — это лемматизация;

основа — словоформа без окончания (напр., для ‘мыла’ и ‘мыло’ [и сущ., и гл.] — мыл ).
...
Рейтинг: 0 / 0
хочу странного (получение смежных основ словоформы)
    #39558729
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ы2,

ok о терминах вы просветили.
задача простая -- навалиться на небольшой текст словарем в 40тысячбратьев 100--200 тысяч "кейвордов" типа "пустое множество" "хорошо темперированный клавир" и т.п., состоящее на 146% из стоп слов и 12--х токенов и найти вхождения ключей с учетом их изменчивости.

см. тут. 20977885

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

кактотак.
...
Рейтинг: 0 / 0
хочу странного (получение смежных основ словоформы)
    #39558935
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ы2<...> Может оказаться, что инструмент прямо перед глазами, но вы его не видите. Если вы ограничиваетесь конкретным хунспелловским словарем, может, вам хватит хунспелловских же wordforms, annalyze и компании.


к сожалению, я сижу в субд.
все что мне реально доступно находится или тут:
перечень доступного инструментария .
//локально могу приподнятся до 9.6. но там условно--полезного -- разве что unnest

или, на крайняк, тут, но уже без аусвайсов :
Код: sql
1.
2.
3.
4.
5.
6.
7.
select * from pg_proc 
--where proname ilike '%word%' --'%hun%'
--where probin ilike '%word%'
--where prosrc ilike '%lex%' --'%word%'
--where proname ilike '%toke%'
where proname ilike '%lex%'
and prolang in(12,13)




то, что лежит тут , таким образом, интересно исключительно для ознакомления. думается.

т.е. "перед глазами" -- это немного совсем не о том. нет ? вернее даже -- совсем не о чём.
...
Рейтинг: 0 / 0
хочу странного (получение смежных основ словоформы)
    #39559328
Ы2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwq,
есть MyStem (Яндексовский морфологический анализатор), к нему — pymystem3 , который, как пишут, умеет быстро лемматизировать. Если pymystem получится затолкать в функцию на plpython, вы сможете усидеть внутри базы: сделаете tsvector по лемматизированным текстам и, соотвественно, будете искать в них лемматизированные же ключевые слова с конфигурацией simple.
...
Рейтинг: 0 / 0
хочу странного (получение смежных основ словоформы)
    #39559370
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ы2,

снкс. ссылки посмотрю. возможно даже для чего--то подойдет.

я переосмыслил задачу. мне достаточно иметь не "все смежные леммы, по заданному словарю"(на всем множестве словоформ словаря), а "все смежные на относительно стабильном множестве словоформ кейвордов, по заданному словарю".

т.е. лепим 2 ф-ии -- 1-ю -- иммутабную, -- для индексирования кейвордов -- без добора лемм смежными. и 2--ю стейбл -- для предподготовки текста (индексация там и раньше не светила) -- с добором лемм по табличке смежности лемм рубрикатора. и говорим потом что--то вроде: "WHERE key_lemms <@ body_lemms(text)"

// т.е. придется завести ещё один чемодан без ручки -- табличку смежных лемм. у меня их нашлось аж около 700 штук (самиз лемм) на все 150000 кейвордов. одна или 2 тренарные группы или даже тетранарные.

кажется должно сносно по времени работать. и всё -- изнутри субд.


ЗЫ вот ещё интересное , думается. надо обдумать, что даёт такое "читерство" с т.з. предподготовки. (более дешовые вспомогательные структуры/индексы)
...
Рейтинг: 0 / 0
хочу странного (получение смежных основ словоформы)
    #39559458
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
<offtop>
пара замечаний "за всё хорошее, против всего плохого"

1. с тех пор ,как есть визбли, визибля, короче мап -- можно было бы и поаккуратнее с речеками ф-х индексов. накопить уже посчитанных и видимых, если цена большая.
1.1. интересно, как указать стоимость ф--ии в зависимотси от массивности аргумента. как--то хотел , не нашел. чтобы не торопилось битмапиться.(раз не умеет значения при этом закапливать)

2. как оказалось -- мнение ,что "внутре у ней неонка" в очередной раз было более чем сильным допущением.
а именно -- моделируя, залез я , какабычна, в сильно не свойственные задаче диапазоны [тексты по мб, "кейвордов" под лям -- настрогал текст на би-лексемы, за отсутствием под рукой "размеченных экспертами" ] -- и увидел, что поиск по
Код: plaintext
long_array @> big_table.short_index_array 
как--то совсем не похож на оптимизированный алгоритмически. там похоже какабычна все из овна и палок. и конь не шибко где валялся. забавно.

чтобы не быть голословным скриптики к 2:
в лоб:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
--set work_mem to '64MB';
with t AS  (
	SELECT id,t_lemmsh
	,cardinality(t_lemmsh) AS len_th
FROM (
	SELECT id, lexize_body_hash_array2(txt) as t_lemmsh
	FROM public.texts 
	where id =2
	)foo
)
select 
	cardinality(kw_lhash) -- lexize_key_hash_array2(keyword))
	,t_lemmsh
	,len_th
	,keyword
FROM t,keywords k
where t_lemmsh@> kw_lhash -- lexize_key_hash_array2(keyword) ;


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Nested Loop  (cost=77.57..1018.65 rows=421 width=64) (actual time=11489345.954..11940000.092 rows=20898 loops=1)
  Output: cardinality(k.kw_lhash), t.t_lemmsh, t.len_th, k.keyword
  Buffers: shared hit=14561415, temp read=64940 written=57574
  CTE t
    ->  Index Scan using texts_pkey on public.texts  (cost=0.28..58.30 rows=1 width=40) (actual time=182268.636..182268.640 rows=1 loops=1)
          Output: texts.id, lexize_body_hash_array2(texts.txt), cardinality(lexize_body_hash_array2(texts.txt))
          Index Cond: (texts.id = 2)
          Buffers: shared hit=12522217, temp read=64940 written=57574
  ->  CTE Scan on t  (cost=0.00..0.02 rows=1 width=36) (actual time=182270.619..182270.624 rows=1 loops=1)
        Output: t.id, t.t_lemmsh, t.len_th
        Buffers: shared hit=12522217, temp read=64940 written=57574
  ->  Bitmap Heap Scan on public.keywords k  (cost=19.27..955.07 rows=421 width=57) (actual time=11307075.306..11757638.682 rows=20898 loops=1)
        Output: k.keyword, k.icnt, k.acnt, k.inv, k.kw_lhash
        Recheck Cond: (t.t_lemmsh @> k.kw_lhash)
        Rows Removed by Index Recheck: 62343
        Heap Blocks: exact=942
        Buffers: shared hit=2039198
        ->  Bitmap Index Scan on keywords_kw_lhash_idx  (cost=0.00..19.16 rows=421 width=0) (actual time=11307053.006..11307053.006 rows=83241 loops=1)
              Index Cond: (t.t_lemmsh @> k.kw_lhash)
              Buffers: shared hit=2038256
Planning time: 0.435 ms
Execution time: 11940024.964 ms



в обход:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
with kwh as (
	SELECT distinct kw_lhash_e FROM keywords 
	,lateral unnest(kw_lhash) AS kw_lhash_e 
)

	SELECT id,  t_lemmsh
	FROM public.texts 
	,lateral (SELECT ARRAY(SELECT t_lemmsh_e FROM
			unnest(lexize_body_hash_array2(txt)) t_lemmsh_e
		where EXISTS ( SELECT 1 FROM kwh
						WHERE t_lemmsh_e = kw_lhash_e)
			) t_lemmsh 
			) AS l
	where id =2


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
Index Scan using texts_pkey on public.texts  (cost=192024.76..192063.41 rows=1 width=36) (actual time=109931.889..109931.892 rows=1 loops=1)
  Output: texts.id, (SubPlan 2)
  Index Cond: (texts.id = 2)
  Buffers: shared hit=6262620, temp read=60588 written=57065
  CTE kwh
    ->  HashAggregate  (cost=192023.48..192024.48 rows=100 width=4) (actual time=233.326..255.607 rows=96306 loops=1)
          Output: kw_lhash_e.kw_lhash_e
          Group Key: kw_lhash_e.kw_lhash_e
          Buffers: shared hit=1510
          ->  Nested Loop  (cost=0.00..170948.98 rows=8429800 width=4) (actual time=0.015..169.721 rows=270416 loops=1)
                Output: kw_lhash_e.kw_lhash_e
                Buffers: shared hit=1510
                ->  Seq Scan on public.keywords  (cost=0.00..2352.98 rows=84298 width=33) (actual time=0.005..9.087 rows=84298 loops=1)
                      Output: keywords.keyword, keywords.icnt, keywords.acnt, keywords.inv, keywords.kw_lhash
                      Buffers: shared hit=1510
                ->  Function Scan on pg_catalog.unnest kw_lhash_e  (cost=0.00..1.00 rows=100 width=4) (actual time=0.001..0.001 rows=3 loops=84298)
                      Output: kw_lhash_e.kw_lhash_e
                      Function Call: unnest(keywords.kw_lhash)
  SubPlan 2
    ->  Hash Semi Join  (cost=28.25..30.63 rows=100 width=4) (actual time=109758.814..109930.254 rows=26360 loops=1)
          Output: t_lemmsh_e.t_lemmsh_e
          Hash Cond: (t_lemmsh_e.t_lemmsh_e = kwh.kw_lhash_e)
          Buffers: shared hit=6262617, temp read=60588 written=57065
          ->  Function Scan on pg_catalog.unnest t_lemmsh_e  (cost=25.00..26.00 rows=100 width=4) (actual time=105996.045..106052.764 rows=679416 loops=1)
                Output: t_lemmsh_e.t_lemmsh_e
                Function Call: unnest(lexize_body_hash_array2(texts.txt))
                Buffers: shared hit=6261107, temp read=59452 written=55767
          ->  Hash  (cost=2.00..2.00 rows=100 width=4) (actual time=3762.716..3762.716 rows=96306 loops=1)
                Output: kwh.kw_lhash_e
                Buckets: 131072 (originally 1024)  Batches: 2 (originally 1)  Memory Usage: 3073kB
                Buffers: shared hit=1510, temp written=304
                ->  CTE Scan on kwh  (cost=0.00..2.00 rows=100 width=4) (actual time=233.328..2862.290 rows=96306 loops=1)
                      Output: kwh.kw_lhash_e
                      Buffers: shared hit=1510, temp written=164
Planning time: 0.359 ms
Execution time: 109933.387 ms




пичаль,
...
Рейтинг: 0 / 0
хочу странного (получение смежных основ словоформы)
    #39559459
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwq,
и тут наврал.
поправ очка:
в обход
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
-- set work_mem to '64MB';
with kwh as (
	SELECT distinct kw_lhash_e FROM keywords 
	,lateral unnest(kw_lhash) AS kw_lhash_e 
)
,t AS (
	SELECT id,  t_lemmsh
	FROM public.texts 
	,lateral (SELECT ARRAY(SELECT t_lemmsh_e FROM
			unnest(lexize_body_hash_array2(txt)) t_lemmsh_e
		where EXISTS ( SELECT 1 FROM kwh
						WHERE t_lemmsh_e = kw_lhash_e)
			) t_lemmsh 
			) AS l
	where id =2
)
select 
	cardinality(kw_lhash) -- lexize_key_hash_array2(keyword))
	,t_lemmsh
	,cardinality(t_lemmsh) AS len_th
	,keyword
FROM t,keywords k
where t_lemmsh@> kw_lhash -- lexize_key_hash_array2(keyword) ;



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
Nested Loop  (cost=192082.68..193024.81 rows=421 width=64) (actual time=146336.322..162961.129 rows=20898 loops=1)
  Output: cardinality(k.kw_lhash), t.t_lemmsh, cardinality(t.t_lemmsh), k.keyword
  Buffers: shared hit=6342650, temp read=32470 written=28787
  CTE kwh
    ->  HashAggregate  (cost=192023.48..192024.48 rows=100 width=4) (actual time=231.414..250.734 rows=96306 loops=1)
          Output: kw_lhash_e.kw_lhash_e
          Group Key: kw_lhash_e.kw_lhash_e
          Buffers: shared hit=1510
          ->  Nested Loop  (cost=0.00..170948.98 rows=8429800 width=4) (actual time=0.013..170.073 rows=270416 loops=1)
                Output: kw_lhash_e.kw_lhash_e
                Buffers: shared hit=1510
                ->  Seq Scan on public.keywords  (cost=0.00..2352.98 rows=84298 width=33) (actual time=0.004..8.777 rows=84298 loops=1)
                      Output: keywords.keyword, keywords.icnt, keywords.acnt, keywords.inv, keywords.kw_lhash
                      Buffers: shared hit=1510
                ->  Function Scan on pg_catalog.unnest kw_lhash_e  (cost=0.00..1.00 rows=100 width=4) (actual time=0.001..0.001 rows=3 loops=84298)
                      Output: kw_lhash_e.kw_lhash_e
                      Function Call: unnest(keywords.kw_lhash)
  CTE t
    ->  Index Scan using texts_pkey on public.texts  (cost=0.28..38.93 rows=1 width=36) (actual time=104071.967..104071.970 rows=1 loops=1)
          Output: texts.id, (SubPlan 2)
          Index Cond: (texts.id = 2)
          Buffers: shared hit=6262620, temp read=32470 written=28787
          SubPlan 2
            ->  Hash Semi Join  (cost=28.25..30.63 rows=100 width=4) (actual time=103935.333..104070.417 rows=26360 loops=1)
                  Output: t_lemmsh_e.t_lemmsh_e
                  Hash Cond: (t_lemmsh_e.t_lemmsh_e = kwh.kw_lhash_e)
                  Buffers: shared hit=6262617, temp read=32470 written=28787
                  ->  Function Scan on pg_catalog.unnest t_lemmsh_e  (cost=25.00..26.00 rows=100 width=4) (actual time=103655.020..103696.153 rows=679416 loops=1)
                        Output: t_lemmsh_e.t_lemmsh_e
                        Function Call: unnest(lexize_body_hash_array2(texts.txt))
                        Buffers: shared hit=6261107, temp read=32470 written=28787
                  ->  Hash  (cost=2.00..2.00 rows=100 width=4) (actual time=280.290..280.290 rows=96306 loops=1)
                        Output: kwh.kw_lhash_e
                        Buckets: 131072 (originally 1024)  Batches: 1 (originally 1)  Memory Usage: 4410kB
                        Buffers: shared hit=1510
                        ->  CTE Scan on kwh  (cost=0.00..2.00 rows=100 width=4) (actual time=231.415..269.925 rows=96306 loops=1)
                              Output: kwh.kw_lhash_e
                              Buffers: shared hit=1510
  ->  CTE Scan on t  (cost=0.00..0.02 rows=1 width=32) (actual time=104071.987..104071.991 rows=1 loops=1)
        Output: t.id, t.t_lemmsh
        Buffers: shared hit=6262620, temp read=32470 written=28787
  ->  Bitmap Heap Scan on public.keywords k  (cost=19.27..955.07 rows=421 width=57) (actual time=42264.328..58878.934 rows=20898 loops=1)
        Output: k.keyword, k.icnt, k.acnt, k.inv, k.kw_lhash
        Recheck Cond: (t.t_lemmsh @> k.kw_lhash)
        Rows Removed by Index Recheck: 62343
        Heap Blocks: exact=942
        Buffers: shared hit=80030
        ->  Bitmap Index Scan on keywords_kw_lhash_idx  (cost=0.00..19.16 rows=421 width=0) (actual time=42263.476..42263.476 rows=83241 loops=1)
              Index Cond: (t.t_lemmsh @> k.kw_lhash)
              Buffers: shared hit=79088
Planning time: 0.379 ms
Execution time: 162969.137 ms

...
Рейтинг: 0 / 0
хочу странного (получение смежных основ словоформы)
    #39560115
Ы2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwq, как я понимаю, вы впали в автоматическую категоризацию/классификацию текстов, но не понимаю, почему это нужно делать сугубо внутри базы. Вне базы есть, к примеру, сильно популярный NLTK (а в нем — nltk.classify ). Поскольку он на питоне, может получиться обернуть его в plpython, хотя мне думается, что разумнее все-таки брать из базы тексты, классифицировать снаружи и грузить результаты обратно. Возможно, так вы и проблему с «неонкой в нутре» обойдете.

P.S. А «читерство» в словаре по коваленковской морфологии — весьма относительное. Вам внутри грамматическая теория, согласно которой нет причастий и деепричастий как отдельных частей речи: они считаются формами глагола, соответственно, и леммой для них будет инфинитив.
...
Рейтинг: 0 / 0
хочу странного (получение смежных основ словоформы)
    #39560138
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ы2,

за ссылки спасибо. посмотрю.


не так, чтобы впал, но пытаюсь собрать что--то ,что можно померить, и что мало зависит от трактовок, в отличь от натягивания сов на произвольные глобусы, с любыми допусками и посадками. (думаю, можно что--то такое доказать, -- "они растягиваются"(тм) , типа)

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

делать это (мерить вхождения) можно хоть на коленке. результат надо ж куда--то складывать -- туда, где и использовать. в базенку.

да и тексты у меня масенькие -- 10 -- 20 полей составляют оцениваемый "текст". кило на 20, думаю, -- в лучшем случае.
это модельный набор текстов дома -- по МБ. я пульпу фб2 накачал да набил в табличку.
...
Рейтинг: 0 / 0
хочу странного (получение смежных основ словоформы)
    #39577339
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ы2qwwq,
есть MyStem (Яндексовский морфологический анализатор), к нему — pymystem3 , который, как пишут, умеет быстро лемматизировать. Если pymystem получится затолкать в функцию на plpython, вы сможете усидеть внутри базы: сделаете tsvector по лемматизированным текстам и, соотвественно, будете искать в них лемматизированные же ключевые слова с конфигурацией simple.

добрался:

Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
мама куском мыла мыла стекло. со стекла стекла пена.
	
[
  {
    "text": "мама", 
    "analysis": [
      {
        "lex": "мама", 
        "gr": "S,жен,од=им,ед"
      }
    ]
  }, 
  {
    "text": " "
  }, 
  {
    "text": "куском", 
    "analysis": [
      {
        "lex": "кусок", 
        "gr": "S,муж,неод=твор,ед"
      }
    ]
  }, 
  {
    "text": " "
  }, 
  {
    "text": "мыла", 
    "analysis": [
      {
        "lex": "мыло", 
        "gr": "S,сред,неод=(вин,мн|род,ед|им,мн)"
      }
    ]
  }, 
  {
    "text": " "
  }, 
  {
    "text": "мыла", 
    "analysis": [
      {
        "lex": "мыло", 
        "gr": "S,сред,неод=(вин,мн|род,ед|им,мн)"
      }
    ]
  }, 
  {
    "text": " "
  }, 
  {
    "text": "стекло", 
    "analysis": [
      {
        "lex": "стекло", 
        "gr": "S,сред,неод=(вин,ед|им,ед)"
      }
    ]
  }, 
  {
    "text": "."
  }, 
  {
    "text": " "
  }, 
  {
    "text": "со", 
    "analysis": [
      {
        "lex": "со", 
        "gr": "PR="
      }
    ]
  }, 
  {
    "text": " "
  }, 
  {
    "text": "стекла", 
    "analysis": [
      {
        "lex": "стекло", 
        "gr": "S,сред,неод=(вин,мн|род,ед|им,мн)"
      }
    ]
  }, 
  {
    "text": " "
  }, 
  {
    "text": "стекла", 
    "analysis": [
      {
        "lex": "стекло", 
        "gr": "S,сред,неод=(вин,мн|род,ед|им,мн)"
      }
    ]
  }, 
  {
    "text": " "
  }, 
  {
    "text": "пена", 
    "analysis": [
      {
        "lex": "пена", 
        "gr": "S,жен,неод=им,ед"
      }
    ]
  }, 
  {
    "text": "."
  }, 
  {
    "text": "\n"
  }
]


"рукожопы-с"(тм)
не можете снять нормально -- не снимайте
а так -- лучше не надо.

//это я было попытался было поделие "томата--парсер" от яндыкса приспособить, все недоумевал, чож оно такое квадратное, обрубленное и со всех сторон туповатое -- ан у него внутри уже неонка мутная. обидно однако.

/* хотел поднятый объект в глобальный словарик плпитония помещать -- не шмогла добицца устойчивого ответа в построчном режиме. даже без погружения в пл субдшный. broken pipe лезет, даже если не коммуникейтить, а побайтно читать. сам, ессно, рукожоп. но теперь , раз виноград зелен -- то и не так за себя обидно */


морал:
надо из каких--то других кубиков "вечность" собирать.
жаднекс для этого слишком жадный в отдаче и слишком вольный в подходах

кто-нть протасова или сходную идеологию к синтакс парсу прикручивал ?
...
Рейтинг: 0 / 0
хочу странного (получение смежных основ словоформы)
    #39577430
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwqЫ2qwwq,
есть MyStem (Яндексовский морфологический анализатор), к нему — pymystem3 , который, как пишут, умеет быстро лемматизировать. Если pymystem получится затолкать в функцию на plpython, вы сможете усидеть внутри базы: сделаете tsvector по лемматизированным текстам и, соотвественно, будете искать в них лемматизированные же ключевые слова с конфигурацией simple.

добрался:

Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
мама куском мыла мыла стекло. со стекла стекла пена.
	
[
  {
    "text": "мама", 
    "analysis": [
      {
        "lex": "мама", 
        "gr": "S,жен,од=им,ед"
      }
    ]
  }, 
  {
    "text": " "
  }, 
  {
    "text": "куском", 
    "analysis": [
      {
        "lex": "кусок", 
        "gr": "S,муж,неод=твор,ед"
      }
    ]
  }, 
  {
    "text": " "
  }, 
  {
    "text": "мыла", 
    "analysis": [
      {
        "lex": "мыло", 
        "gr": "S,сред,неод=(вин,мн|род,ед|им,мн)"
      }
    ]
  }, 
  {
    "text": " "
  }, 
  {
    "text": "мыла", 
    "analysis": [
      {
        "lex": "мыло", 
        "gr": "S,сред,неод=(вин,мн|род,ед|им,мн)"
      }
    ]
  }, 
  {
    "text": " "
  }, 
  {
    "text": "стекло", 
    "analysis": [
      {
        "lex": "стекло", 
        "gr": "S,сред,неод=(вин,ед|им,ед)"
      }
    ]
  }, 
  {
    "text": "."
  }, 
  {
    "text": " "
  }, 
  {
    "text": "со", 
    "analysis": [
      {
        "lex": "со", 
        "gr": "PR="
      }
    ]
  }, 
  {
    "text": " "
  }, 
  {
    "text": "стекла", 
    "analysis": [
      {
        "lex": "стекло", 
        "gr": "S,сред,неод=(вин,мн|род,ед|им,мн)"
      }
    ]
  }, 
  {
    "text": " "
  }, 
  {
    "text": "стекла", 
    "analysis": [
      {
        "lex": "стекло", 
        "gr": "S,сред,неод=(вин,мн|род,ед|им,мн)"
      }
    ]
  }, 
  {
    "text": " "
  }, 
  {
    "text": "пена", 
    "analysis": [
      {
        "lex": "пена", 
        "gr": "S,жен,неод=им,ед"
      }
    ]
  }, 
  {
    "text": "."
  }, 
  {
    "text": "\n"
  }
]


"рукожопы-с"(тм)
не можете снять нормально -- не снимайте
а так -- лучше не надо.

//это я было попытался было поделие "томата--парсер" от яндыкса приспособить, все недоумевал, чож оно такое квадратное, обрубленное и со всех сторон туповатое -- ан у него внутри уже неонка мутная. обидно однако.

/* хотел поднятый объект в глобальный словарик плпитония помещать -- не шмогла добицца устойчивого ответа в построчном режиме. даже без погружения в пл субдшный. broken pipe лезет, даже если не коммуникейтить, а побайтно читать. сам, ессно, рукожоп. но теперь , раз виноград зелен -- то и не так за себя обидно */


морал:
надо из каких--то других кубиков "вечность" собирать.
жаднекс для этого слишком жадный в отдаче и слишком вольный в подходах

кто-нть протасова или сходную идеологию к синтакс парсу прикручивал ?

Вариант:

мама куском кусочного мыла мыла стекло. со стекла стекла пенистая пена.
...
Рейтинг: 0 / 0
хочу странного (получение смежных основ словоформы)
    #39577446
Ы2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг ХупинВариант:
мама куском кусочного мыла мыла стекло. со стекла стекла пенистая пена.
С точки зрения проблемы, это тот же самый вариант: синтаксическая омонимия форм ‘стекла’ стекло[N]-GEN.SG и ‘стекла’ стечь[V]-PST.3SG.F.
В одиночку морфологический анализатор ее снять не может и не должен, но, по-хорошему, должен был выдать оба варианта разбора.
...
Рейтинг: 0 / 0
хочу странного (получение смежных основ словоформы)
    #39577452
Ы2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwq,
если уж вы решили забраться в синтаксис, можете попробовать Link Grammar Parser . Сам я его не трогал, поэтому ничего конкретного сказать не могу.
...
Рейтинг: 0 / 0
хочу странного (получение смежных основ словоформы)
    #39577470
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ы2qwwq,
если уж вы решили забраться в синтаксис, можете попробовать Link Grammar Parser . Сам я его не трогал, поэтому ничего конкретного сказать не могу.
многозначный аналайз опционально возможен
Код: python
1.
disambiguation = False


-- "был неправ, вспылил"(ц)

многозначный лексайз с массивами лекксем надо писать самому.

собственно томита--парсер потенциально неплох (не без странностей), но мой пайтон оставляет желать. покручу ещё. (хочу а-ля пайплайн непрерывный -- в субд в сеансе).

на гитхабе есть поделия а-ля томита 14--х гг. на основе пайморфа2 -- надо покрутить.

за ссылку сенкс.

2РХ "косой косой косой косой косил косой" -- где-то видел недавно. это уже почти как "про дворника и контекст".
...
Рейтинг: 0 / 0
хочу странного (получение смежных основ словоформы)
    #39577472
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ы2qwwq,
если уж вы решили забраться в синтаксис, можете попробовать Link Grammar Parser . Сам я его не трогал, поэтому ничего конкретного сказать не могу.

в чем его суть - этого Link Grammar Parser?
...
Рейтинг: 0 / 0
хочу странного (получение смежных основ словоформы)
    #39577481
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин,
судя по

https://yury-anikin.livejournal.com/10496.html

в бесплатности (в отличие от посконного аналога).

как я понимаю, на пальцах (и со своими тараканами) -- есть набор схем бинарных и далее связей членов предложения (и их агрегатов), с относительно четкой иерархией (схем) -- вдоль которой (иерархии) можно разбирать сложные предложения. синтакс--парсеры должны предлагать средства для описания граматик оных схем. как-то так, вероятно. (если схемы не зашиты напрочь) добавить еще семантические схемы (можно ли и как вероятно прилагать вкус к солнцу) -- поверх/в параллель -- и будет почти ИИ.
...
Рейтинг: 0 / 0
хочу странного (получение смежных основ словоформы)
    #39577533
Ы2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупинв чем его суть - этого Link Grammar Parser?
Это синтаксический анализатор, использующий формализм грамматики связей в отличие от, напр. грамматики [непосредственных] составляющих или грамматики зависимостей. В принципе, эти грамматики пересчитываются друг в друга, но часто бывает, что для конкретного языка одна из них оказывается удобнее.
...
Рейтинг: 0 / 0
хочу странного (получение смежных основ словоформы)
    #39577535
Ы2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwqкак я понимаю, на пальцах (и со своими тараканами) -- есть набор схем бинарных и далее связей членов предложения (и их агрегатов), с относительно четкой иерархией (схем) -- вдоль которой (иерархии) можно разбирать сложные предложения. синтакс--парсеры должны предлагать средства для описания граматик оных схем. как-то так, вероятно. (если схемы не зашиты напрочь) добавить еще семантические схемы (можно ли и как вероятно прилагать вкус к солнцу) -- поверх/в параллель -- и будет почти ИИ.
В общих чертах, так и есть, но ИИ не получится. Для него еще, как минимум, нужно машинное обучение. См. ABBYY Compreno (про него писали, что оно может понимать текст).
...
Рейтинг: 0 / 0
хочу странного (получение смежных основ словоформы)
    #39577540
256k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ы2Ролг Хупинв чем его суть - этого Link Grammar Parser?
Это синтаксический анализатор, использующий формализм грамматики связей в отличие от, напр. грамматики [непосредственных] составляющих или грамматики зависимостей. В принципе, эти грамматики пересчитываются друг в друга, но часто бывает, что для конкретного языка одна из них оказывается удобнее.

Странно, что большие базы не включают подобные обработчики в стандартные поставки: PostgreSQL, SQL Server
Даже при желании не ясно, как это прикручивать к базам этих серверов
...
Рейтинг: 0 / 0
хочу странного (получение смежных основ словоформы)
    #39577620
Ы2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
256k,
полагаю, потому, что обработка синтаксиса в общем случае для полнотекстового поиска не требуется.
...
Рейтинг: 0 / 0
хочу странного (получение смежных основ словоформы)
    #39577861
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ы2256k,
полагаю, потому, что обработка синтаксиса в общем случае для полнотекстового поиска не требуется.
скорее -- 80% сливок снимаются обычным токенайзером + нормализацией. (+ инвертированный индекс по результатам)

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

в рсубд, как правило, разбор больших текстов не нужен. (большим стационарным текстам и вне субд хорошо -- им меняться не нужно)

максимум, думаю, -- нужен разбор согласований коротких искомых подфраз ("ключевых" или же "фактов"), дополнительно к сущ-му. это выльется в вычленение характеристик, которые и так иногда выдираются (в ханспельном дикте есть метки), но не предоставляются, и, возможно, не хранение (всех) их, а сохранение (в индексах) синтаксических неких соотношений (объект/субъект/действие/и т.п.), возникших в рез-те разбора с применением морфы. например -- тех же "фактов" жаднекс-томата-кетчупа.
и все это должно быть лёгким. попутно всё это пересекается ключевыми словарями -- ограниченными множествами слов/цепочек/регулярок/т.п., на котором выделяются/ищутся "факты".

появится одна удачная реализация у кого-то -- все подтянутся.
...
Рейтинг: 0 / 0
хочу странного (получение смежных основ словоформы)
    #39578023
Ы2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwqдалее чем глубже тем сложнее, и отвечающих задачам выразительных средств (там возникают потребности в декларативном описании желаемого. причем желаемые связываются в иерархическую структуру -- ее бы тоже описывать тут же, а не складывать в пачки файликов с инклудами/импортами) пока как--то даже не наблюдается.
Вы бы описали желаемое (результат) понятным языком.

qwwqнапример, вся мелкая кухня с наборами граммем и т.п. меток не устоялась. у всех -- своя.
Тут несколько не всегда связанных между собой собак зарыты. С набором граммем в лингвистике сейчас особой неопределенности нет, могут поспорить о чем-то экзотическом типа миративности (грубо говоря, существует ли грамматическое выражение степени удивления говорящего по поводу произносимого), но базовый набор стабилен. Что касается грамматических помет и глосс, то хотя сейчас почти все делают по Лейпцигским правилам глоссирования, Крофту или Леманну, мелких вариаций все равно много (под конкретный язык, теорию или вкусы автора), но человек разберет :) Соответственно, все это перетекает в академические проекты анализаторов и проч.
А дальше вступают в дело инженеры и прочие практики, у которых другие задачи и подходы (в качестве иллюстрации можно на Ютубе посмотреть лекцию Клышинского про написание морфологии). И в печальном итоге оказывается, часто проще на большом корпусе обучить нейронную сеть, чем разбираться с множеством теорий на каждом уровне описания естественного языка.

qwwqмаксимум, думаю, -- нужен разбор согласований коротких искомых подфраз ("ключевых" или же "фактов"), дополнительно к сущ-му. это выльется в вычленение характеристик, которые и так иногда выдираются (в ханспельном дикте есть метки), но не предоставляются, и, возможно, не хранение (всех) их, а сохранение (в индексах) синтаксических неких соотношений (объект/субъект/действие/и т.п.), возникших в рез-те разбора с применением морфы. например -- тех же "фактов" жаднекс-томата-кетчупа.
и все это должно быть лёгким. попутно всё это пересекается ключевыми словарями -- ограниченными множествами слов/цепочек/регулярок/т.п., на котором выделяются/ищутся "факты".
Если искомое по своей природе структурировано, то можно обойтись вообще без разбора синтаксиса естественного языка, т.к. формальное описание структуры и будет синтаксисом для конкретного типа случаев (как я понял, томита так и делает, и морфология ей нужна только, чтобы соотнести ‘поганку’ с Грибами как семантическим классом). Для «неких соотношений (объект/субъект/действие/и т.п.)», не имеющих заранее известной структуры, будет нужен довольно приличный синтаксический анализатор и выход на семантические роли.
И легким это все будет, если работать с языком типа вьетнамского, где практически грамматика выражается лексически либо порядком слов.
...
Рейтинг: 0 / 0
хочу странного (получение смежных основ словоформы)
    #39580938
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ы2Если искомое по своей природе структурировано, то можно обойтись вообще без разбора синтаксиса естественного языка
<...>
Для «неких соотношений (объект/субъект/действие/и т.п.)», не имеющих заранее известной структуры, будет нужен довольно приличный синтаксический анализатор и выход на семантические роли.минимально искомое -- поиск "ключевых слов" (в основном -- "мультивордов" -- в терминах томаты-яндекса) , входящие в сплошной текст, в т.ч. с возможностью (следующий уровень задачи) "размазывания" (инжекцию промежуточных токенов меж токенами "мультиворда") или (гораздо дальше программы--минимум) слияния

под слиянием тут имеется в виду что-то типа :

ключи :
"квадратное уравнение" | "кубическое уравнение" -- в тексте "квадратных и кубических уравнений в целых..." -- обнаружить эти 2 ключа как 2 факта.

синтакс разбор нужен для проверки согласования (как минимум) "частей мультивордов", особенно если идти в сторону преодоления перестановочности (вообще говоря во фразе могут попасться квадратные сепульки и уравнения сепулярности, и надо понять , что формально уравнения ну никак не квадратные (по крайней мере что не об этом речь)
Ы2Вы бы описали желаемое (результат) понятным языком.минизадача -- выше.

задача в общем виде:
допустим есть объекты разного вида. характеризуемые в т.ч. текстами, с ними связанными.

надо решать задачи по подбору соответствий объектов одного вида -- другому.
евпочя

тут -- готов услышать "более простые/правильные подходы"


а вообще говоря я на досуге покрутил томиту в пайтоне "по образцам":
-- даже добился асинхронной правда работы (взяв за основу https://github.com/vas3k/poor-python-yandex-tomita-parser ) в построчном режиме. (запрос -- ответ, не кладя загруженного парсера)
===========================
более удобным (синхронным) образом можно опрашивать вот этот проектик -- https://github.com/vas3k/python-glr-parser , правда с грамматиками и словарями в нем все довольно кисло -- собираются программно в пайтоне. мультивордов в словарях нет -- можно набрать как грамматики из конкретных лексем с метками согласования. (например вторым экземпляром парсера нарезаем файл "ключевых мультивордов" на "ворды", и програмно формируем из них строки грамматики вида
Код: python
1.
2.
3.
4.
gramm = u"""S='лошадь'  'пржевальский'<хххх=-1>
                |'африканский'<agr-gnc=1> 'слон'
                |'нелинейный'<agr-gnc=1> 'уравнение' 'Пупкин'<хххх=-1>
                |...."""




слияние грамматик и т.п. удобства, предоставляемые томитой яндекса -- все на улице.

и судя по всему оно лажает(с согласованиями) от перестановки альтернатив /разбиения на нетерминалы
т.е.
Код: python
1.
2.
3.
4.
5.
gramm = u"""S= Losh | Slon | St | ...
                Losh = 'лошадь'  'пржевальский'<хххх=-1>
                Slon = 'африканский'<agr-gnc=1> 'слон'
                Dt = 'нелинейный'<agr-gnc=1> 'уравнение' 'Пупкин'<хххх=-1>
                ...."""


-- дает результат отличный от предыдущего (надо лезть в исходник, недолез пока)

зато, например, погружаемо в пж--плпайтон как единожды (на запрос или сессию) загружаемый парсер.
...
Рейтинг: 0 / 0
хочу странного (получение смежных основ словоформы)
    #39581232
Ы2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwq, извлечение MVE тема вполне горячая и простых тиражируемых решений, похоже, пока нет. Если интересно, можете посмотреть , как бьется передовая мысль (внутри в поиске спросить про ”multi-word exrression”).
...
Рейтинг: 0 / 0
25 сообщений из 27, страница 1 из 2
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / хочу странного (получение смежных основ словоформы)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]