0

все.Как получить минимальное количество предложений от предложений, чьи слова охватывают максимальные предложения в исходном корпусе?

У меня есть одна проблема «оптимизации», и я действительно не знаю, каким образом я должен отправиться в путь. Вот описание моей проблемы:

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

Очень короткий пример того, что мне нужно сделать:

Корпус:

  • черная собака
  • серый кот
  • большая собака
  • серая мышь
  • большой мышь

Пример минимальных предложений для покрытия максимум оригинального корпуса:

  • черная собака
  • большой мыши
  • серый кот

От 3 предложений (и их слова) выше, мы можем сформировать остальные предложения в корпусе. Конечно, я ищу какой-то метод, оптимально вычисляемый, потому что мой корпус содержит тысячи предложений. Знаете ли вы какой-либо метод, подходящий для этой проблемы?

Спасибо за ваши ответы!

Morphid

+0

Похоже, вам нужен дополнительный параметр здесь, чтобы указать, сколько вы хотите, чтобы обменять лишнее слово в своем минимальном списке, чтобы покрыть больше слов в корпусе. Напр. почему бы не «черная собака»? – samgak

+1

Звучит как проблема с обложкой: https: //en.wikipedia.org/wiki/Set_cover_problem – m69

+0

Спасибо за ваши ответы :-) @samgak Мне нужно записать точные фразы из моего корпуса, потому что мне нужно сохранить их формат (из-за будущего эксперимента, а не «генерировать» минимум предложений для покрытия всего corpus) – Morphid

ответ

0

Если ваш корпус так просто, как вы показываете, и вы действительно не нужно создавать предложения, вы можете просто вычислить юниграмм. Если он более сложный, запустите форму моделирования темы. Моделирование темы вернет слова, общие по всему корпусу. Вам нужно будет иметь свой корпус в комплекте документов. В вашем случае каждый «документ» может быть предложением. Хороший алгоритм моделирования темы называется «Скрытое распределение дирихле» (LDA).

Для технической документации по LDA см. Latent Dirichlet Allocation.

Для статьи с образцом кода Python с использованием библиотеки gensim см. Experiments on the English Wikipedia.

Следующая статья и образец кода Jordan Barber, Latent Dirichlet Allocation (LDA) with Python, использует NLTK для создания корпуса и gensim для LDA. Этот код более адаптируется к другим приложениям, чем код Википедии.

+0

Большое спасибо за ваш ответ! Как вы упомянули, униграмм может быть достаточно в случае данных, которые у меня есть, но LDA мне интересен, и я собираюсь изучить его больше и попытаться применить его. Благодарю. – Morphid

Смежные вопросы