FileBackedDictionary 대신 MapBackedDictionary 또는 DatabaseBackedDictionary를 사용할 수 있습니다.
MapBackedDictionary로 실행하는 방법을 설명합니다.
jwnl 유틸리티를 사용해야합니다. WordNet 프로젝트를 열면 클래스 DictionaryToMap.java main 메소드를 사용하여 기존 dicitonary 폴더를 맵 포더로 변환 할 수 있습니다.
그런 다음 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는 처음에로드하는 데 시간이 오래 걸리지 만 성능이 크게 향상됩니다.
파일을 RAM에 둡니다 (예 : Linux의 경우 '/ dev/shm')? 파일이 얼마나 큽니까? OS가 충분한 RAM을 가지고 있다고 가정하면 자동으로 캐시해야합니다. – maaartinus
약 36MB가 있습니다. 클래스조차도 PrincetonRandomAccessDictionaryFile이라고 부릅니다. 그래서 이것은 그들이 아마도 메모리에서 읽는 것을 의미합니다. 그러나 그것은 천천히 진행됩니다. 파일을 가져 오는 데 오랜 시간이 걸렸습니다. 그래서 그것이 작동하는 방식으로 할 수있는 무언가가 있습니까? 또는 reaad() 및 readLine()이 너무 오래 걸리는 것이 정상입니까? 나는 그들이 독서를 비효율적으로 수행하는지 여부를 결정할 방법을 모른다. – Ev0oD
그것 [보이는] (http://grepcode.com/file/repo1.maven.org/maven2/net.sf.jwordnet/jwnl/1.4_rc3/net/didion/jwnl/dictionary/morph/LookupIndexWordOperation.java? av = f)에는 여러 구현이 있으므로 메모리 기반 메모리를 선택하기 만하면됩니다. – maaartinus