许多文章的单词列表 - 文档术语矩阵

发布于 2024-08-15 18:37:28 字数 563 浏览 7 评论 0原文

我有近 15 万篇土耳其语文章。我将使用文章进行自然语言处理研究。 我想在处理文章后存储每篇文章的单词和频率。

我现在将它们存储在 RDBS 中。

我有 3 个表:

文章 ->文章 ID,文本
词-> word_id、类型、单词
词条-> id,word_id,article_id,频率(word_id的索引,article_id的索引)

我将查询

  • 一篇文章中的所有单词
  • 一个单词每篇文章的频率
  • 所有文章中的单词出现次数以及

我在单词-文章表中拥有数百万行的文章。我在这个项目中一直使用 RDBS。开始用mysql,现在用oracle。但我不想使用oracle,想要比mysql更好的性能。

另外,我必须在具有 4GB 内存的机器上处理这项工作。
简单来说,如何存储文档术语矩阵并对其进行查询?性能是必要的。 “键值数据库”在性能上能打败mysql吗?或者什么可以打败mysql?

如果你的答案取决于编程语言,我正在用 python 编写代码。但是C/C++、Java就可以了。

I have nearly 150k articles in Turkish. I will use articles for natural language processing research.
I want to store words and frequency of them per article after processing articles.

I'm storing them in RDBS now.

I have 3 tables:

Articles -> article_id,text
Words -> word_id, type, word
Words-Article -> id, word_id, article_id, frequency (index for word_id, index for article_id )

I will query for

  • ALL Words in an article
  • one Word's frequency per article
  • Word occurrences in all articles and in which articles

I have millions of rows in words-article table. I always worked with RDBS in this project. started with mysql and using oracle now. But I don't want to use oracle and want better performance than mysql.

Also I have to handle this job in a machine with 4gb ram.
Simply, how to store document-term matrix and make some query on it? performance is necessary. can "key-value databases" beat mysql at performance? or what can beat mysql?

if your answer programming language depended, I'm writing code in python. But C/C++ , Java is ok.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

淡看悲欢离合 2024-08-22 18:37:28

也许查看 lucene (或 Zend_Search_Lucene 在 php 中)。这是非常好的 FTS 引擎。

maybe check out lucene (or Zend_Search_Lucene in php). it's very nice FTS engine.

靖瑶 2024-08-22 18:37:28

对于 15 万篇文章,words_articles 表中必须有几亿行。只要正确配置 MySQL,这是可以管理的。

一些提示:

  • 确保您的表是 MyISAM,而不是 InnoDB。
  • 删除words_articles表中的id字段并将(word_id,article_id)作为主键。另外,在words_articles表中为word_id和article_id创建单独的索引:

    更改表words_articles
    删除主键,
    添加主键(word_id,article_id),
    添加索引(word_id),
    添加索引(article_id);
    

    (在单个 alter 语句中执行所有操作可提供更好的性能)。

  • 为单词表中的单词创建索引:

    ALTER TABLE 单词 ADD INDEX (单词);
    
  • 调整 my.cnf。具体来说,增加缓冲区大小(尤其是 key_buffer_size)。 my-huge.cnf 可能是一个很好的起点。

For 150k articles, you must have a few hundred million rows in the words_articles table. This is manageable, as long as you configure MySQL properly.

A few tips:

  • Make sure your tables are MyISAM, not InnoDB.
  • Drop the id field in the words_articles table and make (word_id, article_id) the primary key. Also, create separate indexes for word_id and article_id in the words_articles table:

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

    (doing everything in a single alter statement gives much better performance).

  • Create an index for word in the words table:

    ALTER TABLE words ADD INDEX (word);
    
  • Tweak my.cnf. Specifically, increase the buffer sizes (especially key_buffer_size). my-huge.cnf might be a good starting point.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文