【问题标题】:Inverted Index System using Python使用 Python 的倒排索引系统
【发布时间】:2012-03-16 04:40:26
【问题描述】:

我正在使用 Python 构建倒排索引。

我对它可以为我提供的性能有些怀疑。

Python 在索引方面会几乎与 Java 或 C 一样快吗?

另外,我想知道是否存在任何模块/实现(它们是什么,请提供一些链接?),与 Java/C 开发的东西相比,它们的性能如何?

我读到了一个人,他通过将 Python 与 Psyco 一起使用来优化他的 Python,速度是 C 的两倍。

我知道这是一种误导,因为 gcc 3.x 编译器的速度非常快。基本上,我的观点是我知道 Python 不会比 C 快。但它有可比性吗? 与Java相比,有人可以阐明它的性能吗?我对此一无所知。 (就倒排索引实现而言,如果可能的话,因为它本质上需要磁盘写入和读取。)

我不是在没有先谷歌搜索的情况下在这里问这个问题。我没有得到明确的答案,因此提出了问题。

非常感谢任何帮助!

【问题讨论】:

    标签: python information-retrieval inverted-index


    【解决方案1】:

    我不相信您会看到倒排索引语言之间的很大差异,因为瓶颈通常是 IO [磁盘访问!]

    如果您想要一些现有的实现来帮助您索引信息,请查看 Apache Lucene for java 及其 python 版本:PyLucene

    【讨论】:

    • 确实非常正确。但是,Java 的 IO 是否比 Python 快? (C 显然是。)如果是/否,那么到什么水平? PyLucene 不只是 Java 版本的包装器吗? IO 基本上仍然由 java 部分进行。不是吗?
    • @Sylar:IO 是特定的实现,并且依赖于操作系统和硬件,而不是依赖于实现语言,AFAIK。是的,PyLucene 只是原始 lucene 的包装器。除非你需要一些非常具体的东西——我会尽可能多地使用它,它会缩短开发时间,而且由于它的广泛使用和不断的测试,lucene 比你将做的 ant 实现更无错误许多用户。
    • 请记住,索引文档有大量的标记、清理和过滤文本。但瓶颈通常是 IO(如果您确实正在写入磁盘)。您可以使用 scala (JVM) 中的这个小实现来检查索引性能:github.com/felipehummel/TinySearchEngine 请注意,搜索性能很差,因为它会即时计算一些东西(否则会被存储)。
    【解决方案2】:

    担心事后的优化。编写代码,对其进行分析,对其进行压力测试,识别慢速部分并在 Cython 或 C 中偏移它们或重新编写代码以使其更高效,如果将其加载到 PyPy 上可能会更快,因为它具有 JIT 编译器,它可以帮助处理长时间运行的进程和循环。

    记住

    过早的优化,是万恶之源。 (当然是在线程之后)

    【讨论】:

    • 我不担心优化,Knuth ;) 我只是好奇它对 Java 或 C 的性能有多好。无论如何我都会这样做。纯粹出于好奇而问!
    猜你喜欢
    • 2012-05-23
    • 1970-01-01
    • 2012-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多