gpt4 book ai didi

java - 使用维基百科数据时如何提高性能?网页?

转载 作者:行者123 更新时间:2023-12-02 21:50:36 28 4
gpt4 key购买 nike

我应该使用Wikipedia的文章链接数据转储从组织的网站中提取代表性术语。
为此,我已经-

  • 抓取并下载了该组织的网页。 (〜110,000)
  • 创建了Wikipedia ID和术语/标题的字典。 (约4000万条记录)

  • 现在,我应该使用字典来处理每个网页,以识别术语并跟踪其术语ID和频率。

    为了使字典适合内存,我将字典拆分成较小的文件。根据我的小型数据集实验,以上处理时间约为75天。

    这仅适用于1个组织。我必须为其中40多个做同样的事情。

    实现-
  • HashMap用于将字典存储在内存中。
  • 使用Boyer-Moore搜索实现,
  • 遍历每个 map 条目以搜索网页中的术语。
  • 对每个网页重复上述操作,并将结果存储在HashMap中。

  • 我尝试过优化代码并调整JVM以获得更好的性能。

    有人可以建议一种更有效的方法来实现上述建议,从而将处理时间减少到几天。

    Hadoop是否可以考虑?

    最佳答案

    根据您的问题:

    Number of Documents = 110000

    Dictionary => List of [TermID, Title Terms] = 40million entries

    Size of documents = 11000 * 1KB per document on an average = 26.9GB
    (1KB per document on an average)

    Size of dictionary = 40million * 256bytes = 9.5GB of raw data
    (256bytes per entry on an average)

    您是如何得出75天估算值的?

    有许多性能指标:
  • 您如何存储文档?
  • 您如何存储/检索字典? (除非您负担得起,否则不假定所有内容都在内存中)
  • 您正在多少台计算机上运行它?
  • 您正在并行执行字典查找吗? (当然,一旦您已经处理了整个维基百科,当然字典是不可变的)

  • 这是我相信您正在做的事情的概要:
    dictionary = read wikipedia dictionary
    document = a sequence of documents
    documents.map { doc =>
    var docTermFreq = Map[String, Int]()
    for(term <- doc.terms.map if(dictionary.contains(term)) ) {
    docTermFreq = docTermFreq + (term -> docTermFreq.getOrElse(term, 0) + 1)
    }
    // store docTermFreq map
    }

    这实际上是在将每个文档分解为 token ,然后在Wikipedia词典中执行查找以查找其 token 的存在。

    这正是 Lucene Analyzer所做的。

    Lucene Tokenizer会将文档转换为 token 。这是在术语被索引到lucene之前发生的。因此,您要做的就是实现一个分析器,该分析器可以查找Wikipedia词典,以了解 token 中是否包含 token 。

    我会这样:
  • 提取每个文档并准备 token 流(使用上述分析器)
  • 索引文档术语。
  • 此时,您将在Lucene Index中只有Wikipedia术语。

  • 执行此操作时,您将获得来自Lucene Index的现成统计信息,例如:

    术语的
  • Document Frequency
  • TermFrequencyVector(正是您需要的)
  • 和一个随时可以使用的倒排索引! (快速了解Inverted Index and Retrieval)

  • 您可以做很多事情来提高性能。例如:
  • 并行处理文档流。
  • 您可以将字典存储在键值数据库(例如BerkeylyDB或Kyoto Cabinet)中,甚至存储在内存中的键值存储中(例如RedisMemcache)。

  • 希望对您有所帮助。

    关于java - 使用维基百科数据时如何提高性能?网页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21310539/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com