Списки слов для многих статей - матрица терминов документа - PullRequest
0 голосов
/ 25 декабря 2009

У меня есть почти 150 тысяч статей на турецком языке. Я буду использовать статьи для исследования обработки естественного языка. Я хочу хранить слова и их частоту для каждой статьи после обработки статей.

Я храню их в RDBS.

У меня есть 3 таблицы:

Статьи -> article_id, текст
Слова -> слово_ид, тип, слово
Words-Article -> id, word_id, article_id, частота (индекс для word_id, индекс для article_id)

Я буду запрашивать

  • ВСЕ слова в статье
  • частота одного слова на статью
  • Слово вхождения во всех статьях и в каких статьях

У меня миллионы строк в таблице слов-статей. Я всегда работал с RDBS в этом проекте. начал с mysql и теперь использовал oracle. Но я не хочу использовать oracle и хочу иметь лучшую производительность, чем mysql.

Также я должен справиться с этой работой на машине с 4 Гб оперативной памяти.
Проще говоря, как сохранить матрицу термина документа и сделать запрос по ней? производительность необходима. могут ли базы данных «ключ-значение» превзойти MySQL по производительности? или что может победить mysql?

если ваш ответ зависит от языка программирования, я пишу код на python. Но C / C ++, Java в порядке.

Ответы [ 2 ]

0 голосов
/ 25 декабря 2009

Для 150 000 статей у вас должно быть несколько сотен миллионов строк в таблице words_articles. Это управляемо, если вы правильно настроили MySQL.

Несколько советов:

  • Убедитесь, что ваши таблицы MyISAM, а не InnoDB.
  • Удалите поле id в таблице words_articles и сделайте (word_id, article_id) первичным ключом. Кроме того, создайте отдельные индексы для word_id и article_id в таблице words_articles:

    ALTER TABLE words_articles
    DROP PRIMARY KEY,
    ADD PRIMARY KEY (word_id, article_id),
    ADD INDEX (word_id),
    ADD INDEX (article_id);
    

    (выполнение всего одного оператора alter дает намного лучшую производительность).

  • Создать индекс для слова в таблице слов:

    ALTER TABLE words ADD INDEX (word);
    
  • Твик my.cnf. В частности, увеличьте размеры буфера (особенно key_buffer_size). my-огромный.cnf может быть хорошей отправной точкой.

0 голосов
/ 25 декабря 2009

возможно проверить lucene (или Zend_Search_Lucene в php). это очень хороший двигатель FTS.

...