【问题标题】:Speed up use of WordNet lemmatizer for Java加快 WordNet lemmatizer for Java 的使用
【发布时间】:2014-07-24 04:40:33
【问题描述】:

另一个问题与此类似,但它使用不同的编程语言,似乎解决了一个相关但不相同的问题。 Is it possible to speed up Wordnet Lemmatizer?

我们正在对文本中的大量单词进行词干提取,如图所示,代码仅使用词干提取就花费了 90% 以上。

当我们稍微阅读代码并分析代码时,wordNet 似乎实际上是在读取文件时,它占用了大部分代码执行时间!有没有办法通过使用数据库而不是文件读取来支持词干提取过程的数据或将所有必要的内容加载到内存并忽略文件来提高性能?或者在词干提取过程中添加一些缓存?

是否有一些易于插入的工具来代替行阅读?

在此处查看行阅读分析:

如您所见,汇总文件读取占用了高达 62% 的运行时间。

【问题讨论】:

  • 你不能把文件放在 RAM 中,例如,/dev/shm 在 Linux 上吗?文件有多大?假设您有足够的 RAM,操作系统应该自动缓存它。
  • 它只有大约 36 MB。甚至这个类也被称为 PrincetonRandomAccessDictionaryFile - 所以这意味着他们很可能是从内存中读取它的。然而它很慢。好吧,人们认为获取文件需要很长时间。那么它的工作方式有什么可以做的吗?或者 read() 和 readLine() 需要这么长时间是正常的吗?我不知道有什么方法可以确定他们的阅读效率是否低。
  • looks like 有多种实现,所以你只需要选择一个基于内存的。
  • 谢谢!现在我看到有一个 MapBackedDictionary 和一个 DatabaseBackedDictionary 替代方案。我现在要搜索如何使用这些。

标签: java performance optimization wordnet


【解决方案1】:

可以使用 MapBackedDictionary 或 DatabaseBackedDictionary 代替 FileBackedDictionary。

我描述了我是如何成功使用 MapBackedDictionary 运行的。

需要使用 jwnl 实用程序。如果你打开 WordNet 项目,你可以使用他们的类 DictionaryToMap.java main 方法将你现有的字典文件夹转换为地图文件夹。

之后,您可以创建一个类似于之前用于 FileBackedDictionary 的 file_properties.xml 的 map_properties.xml 文件。这次标签会有所不同。我在这里发布了我的示例 xml,这对我来说效果很好。

<?xml version="1.0" encoding="UTF-8"?>
<jwnl_properties language="en">
<version publisher="Princeton" number="3.0" language="en"/>
<dictionary class="net.didion.jwnl.dictionary.MapBackedDictionary">
    <param name="morphological_processor" value="net.didion.jwnl.dictionary.morph.DefaultMorphologicalProcessor">
        <param name="operations">
            <param value="net.didion.jwnl.dictionary.morph.LookupExceptionsOperation"/>
            <param value="net.didion.jwnl.dictionary.morph.DetachSuffixesOperation">
                <param name="noun" value="|s=|ses=s|xes=x|zes=z|ches=ch|shes=sh|men=man|ies=y|"/>
                <param name="verb" value="|s=|ies=y|es=e|es=|ed=e|ed=|ing=e|ing=|"/>
                <param name="adjective" value="|er=|est=|er=e|est=e|"/>
                <param name="operations">
                    <param value="net.didion.jwnl.dictionary.morph.LookupIndexWordOperation"/>
                    <param value="net.didion.jwnl.dictionary.morph.LookupExceptionsOperation"/>
                </param>
            </param>
            <param value="net.didion.jwnl.dictionary.morph.TokenizerOperation">
                <param name="delimiters">
                    <param value=" "/>
                    <param value="-"/>
                </param>
                <param name="token_operations">
                    <param value="net.didion.jwnl.dictionary.morph.LookupIndexWordOperation"/>
                    <param value="net.didion.jwnl.dictionary.morph.LookupExceptionsOperation"/>
                    <param value="net.didion.jwnl.dictionary.morph.DetachSuffixesOperation">
                        <param name="noun" value="|s=|ses=s|xes=x|zes=z|ches=ch|shes=sh|men=man|ies=y|"/>
                        <param name="verb" value="|s=|ies=y|es=e|es=|ed=e|ed=|ing=e|ing=|"/>
                        <param name="adjective" value="|er=|est=|er=e|est=e|"/>
                        <param name="operations">
                            <param value="net.didion.jwnl.dictionary.morph.LookupIndexWordOperation"/>
                            <param value="net.didion.jwnl.dictionary.morph.LookupExceptionsOperation"/>
                        </param>
                    </param>
                </param>
            </param>
        </param>
    </param>
    <param name="dictionary_element_factory" value="net.didion.jwnl.data.MapBackedDictionaryElementFactory"/>
    <param name="file_type" value="net.didion.jwnl.princeton.file.PrincetonObjectDictionaryFile"/>
    <param name="dictionary_path" value="path\to\wordnetMap\"/>
</dictionary>
<resource class="PrincetonResource"/>
</jwnl_properties>

注意wordnetMap的路径——用前面提到的方法把它设置到你输出字典转换的地方。

不要忘记使用新的属性文件初始化 JWNL。 MapBackedDictionary 最初的加载时间会更长,但性能提升非常快。

【讨论】:

  • 对我来说,这看起来像是一个非常糟糕的 XML 混乱。我真的很想知道为什么他们破坏可用性而不是简单地预取文件(如果需要任何 XML,它应该保持不变)。
  • 不确定您的意思。无论如何,我自己只是从 extJwnl 库中复制了一些 xml,因为我几乎找不到关于如何设置 xml 配置的文档。找到需要修改的地方,修改一下。如果有一些文档,我认为 xml 文件没有问题,但这也让我很恼火。
猜你喜欢
  • 2013-04-17
  • 2017-01-11
  • 2018-10-06
  • 1970-01-01
  • 2016-02-10
  • 2021-06-14
  • 2014-04-15
  • 2015-11-14
  • 1970-01-01
相关资源
最近更新 更多