2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 как восстановить знаки препинания после лемматизации?
Сообщение07.03.2017, 10:11 
Пусть есть фраза
Код:
"Конечно, большие конфеты лучше!" -- сказала она и взяла большую конфету.

Пусть нас интересует частотность встречающихся 2-грамм слов (хотя хотим потом работать с любыми N-граммами). Лемматизируем нашу фразу:
Код:
"конечно, большой конфета хорошо!" -- сказать она и взять большой конфета.

Удаляем лишние знаки препинания:
Код:
конечно большой конфета хорошо сказать она и взять большой конфета

Разбиваем на 2-граммы:
Код:
[конечно большой] [большой конфета] [конфета хорошо] [хорошо сказать] [сказать она] [она и] [и взять] [взять большой] [большой конфета]

Находим повторяющиеся и упорядочиваем по числу вхождений:
Код:
[большой конфета]2 [конечно большой]1 [конфета хорошо]1 [хорошо сказать]1 [сказать она]1 [она и]1 [и взять]1 [взять большой]1


Но как теперь быть, если хочется вывести нелемматизированные и со знаками препинания встречания? То есть чтобы получить такое:
Код:
[большие конфеты, большую конфету]2 [Конечно, большие]1 [конфеты лучше!]1 [лучше!" -- сказала]1 [сказала она]1 [она и]1 [и взяла]1 [взяла большую]1



То есть чтобы как бы кусочки из текста анижки чтобы показывались. Как концептуально можно двумя разными образами прочитывать одну и ту же штуку? Как можно экранировать знаки препинания а потом восстанавливать?

 
 
 
 Re: как восстановить знаки препинания после лемматизации?
Сообщение07.03.2017, 12:30 
Хранить больше, чем нужно для сравнения, разумеется? Или я что-то не понял.

-- Вт мар 07, 2017 14:35:50 --

Т. е. мне не совсем понятно, в чём заключается языконезависимый вопрос. В некоторых языках группировку элементов коллекции по заданной функции сравнения в какой-нибудь multimap писать практически совершенно не придётся, в других придётся писать кучу кода, но сама задача выглядит просто, если хранить в $n$-граммах всё или почти всё исходное представление (даже просто кусок строки — поначалу я подумал предложить хранить отдельно слова, а отдельно префикс, постфикс и инфиксы пунктуации между ними, но вряд ли это нужно?), а не только лемматизованное.

 
 
 
 Re: как восстановить знаки препинания после лемматизации?
Сообщение07.03.2017, 15:31 
Язык Python.

Хранить в n-граммах всё -- это пожалуйста. Но нужно потом построить одну функцию которая смотрит на них и ищет повторения без учетов знаков препинания. И вторая функция, которая выводит output со всеми этими знаками? Делать лист листов, и засунуть знаки препинания в подлист? А как тогда с заглавными быть?

 
 
 
 Re: как восстановить знаки препинания после лемматизации?
Сообщение07.03.2017, 15:38 
Нет, я всё же думаю, что хранить знаки препинания отдельно не несёт пользы; заглавные в такой подстроке при надобности можно будет убрать обычной строковой функцией. Пусть каждая $n$-грамма — кортеж из такой строки и информации, касающейся алгоритмов, работающих с $n$-граммами, тогда функция сравнения будет просто делать что-то своё со второй компонентой, как раньше она делала бы это с $n$-граммой, которая не знает об исходном представлении. Функция вывода, наоборот, будет игнорировать вторую компоненту и просто возвращать первую. (Если исходная большая строка всегда доступна, вместо подстрок в первых компонентах может быть полезнее хранить индекс и длину подстроки, конечно.)

-- Вт мар 07, 2017 17:38:36 --

arseniiv в сообщении #1197872 писал(а):
я всё же думаю, что хранить знаки препинания отдельно не несёт пользы
Если не нужно делать ещё чего-то, что тут не упомянуто. :-)

 
 
 
 Re: как восстановить знаки препинания после лемматизации?
Сообщение07.03.2017, 16:16 
Спасибо, буду пробовать кортежи.

 
 
 
 Re: как восстановить знаки препинания после лемматизации?
Сообщение07.03.2017, 18:17 
А вариант с записью в разные ключи файла JSON, как думаете, годится?

-- 07.03.2017, 18:17 --

А вариант с записью в разные ключи файла JSON, как думаете, годится?

 
 
 
 Re: как восстановить знаки препинания после лемматизации?
Сообщение07.03.2017, 20:04 
JSON — это же не формат внутреннего представления. Как формат внутреннего он из-за своей общности не годится.

-- Вт мар 07, 2017 22:04:59 --

Можно, конечно, есть кактус, особенно если не мне. :-)

 
 
 [ Сообщений: 7 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group