Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
加快WordNet lemmatizer for Java的使用_Java_Performance_Optimization_Wordnet - Fatal编程技术网

加快WordNet lemmatizer for Java的使用

加快WordNet lemmatizer for Java的使用,java,performance,optimization,wordnet,Java,Performance,Optimization,Wordnet,另一个问题与此类似,但它是在不同的编程语言中,它似乎解决了一个相关但不相同的问题 我们对文本中的大量单词进行词干分析,代码花费了90%以上的时间进行词干分析,如图所示 当我们稍微阅读代码并分析代码时,wordNet似乎实际上是在读取文件,而这占用了大部分代码执行时间!有没有一种方法可以提高性能,比如说,使用数据库而不是文件读取来支持词干分析过程的数据,或者加载内存所需的所有内容并忽略文件?或者在词干生成过程中添加一些缓存 是否有一些工具可以很容易地插入以取代行读数 请参见此处的行读取配置文件:

另一个问题与此类似,但它是在不同的编程语言中,它似乎解决了一个相关但不相同的问题

我们对文本中的大量单词进行词干分析,代码花费了90%以上的时间进行词干分析,如图所示

当我们稍微阅读代码并分析代码时,wordNet似乎实际上是在读取文件,而这占用了大部分代码执行时间!有没有一种方法可以提高性能,比如说,使用数据库而不是文件读取来支持词干分析过程的数据,或者加载内存所需的所有内容并忽略文件?或者在词干生成过程中添加一些缓存

是否有一些工具可以很容易地插入以取代行读数

请参见此处的行读取配置文件:


正如您所看到的,概要文件读取占运行时间的62%。

可以使用MapBackedDictionary或DatabaseBackedDictionary代替FileBackedDictionary

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

需要使用jwnl实用程序。如果您打开WordNet项目,您可以使用其类DictionaryToMap.java main方法将现有的DICITORY文件夹转换为map fodler

之后,您可以创建一个map_properties.xml文件,该文件类似于您先前用于FileBackedDictionary的文件_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最初加载需要更长的时间,但性能提升非常快。

您不能将文件放入RAM中吗,例如Linux上的
/dev/shm
?档案有多大?如果你有足够的内存,操作系统应该自动缓存它。它只有大约36Mbs。甚至这个类也被称为PrincetonRandomAccessDictionaryFile——这意味着他们很可能是从内存中读取的。然而,这是缓慢的。有一种想法认为获取文件需要很长时间。那么,它的工作方式可以做些什么呢?或者reaad()和readLine()花费这么长时间是正常的吗?我不知道有什么方法可以确定他们是否在有效地进行读取。可能有多个实现,所以您只需要选择一个基于内存的实现。谢谢!现在我看到了MapBackedDictionary和DatabaseBackedDictionary的替代方案。我现在要搜索如何使用这些,这看起来像是一个非常糟糕的XML混乱。我真的想知道为什么他们破坏了可用性而不是简单地预取文件(如果需要任何XML,它应该保持不变)。无论如何,我自己只是从extJwnl库复制了一些xml,因为我几乎找不到关于如何设置xml配置的文档。找到需要修改的内容并进行修改。如果有一些文档的话,我认为xml文件没有问题,但这也让我很恼火。