Pergunta

Preciso usar o Wordnet em um aplicativo baseado em java.Eu quero:

  • pesquisar synsets

  • encontrar semelhança/relacionamento entre synsets

Meu aplicativo usa gráficos RDF e sei que existem endpoints SPARQL com Wordnet, mas acho que é melhor ter uma cópia local do conjunto de dados, pois não é muito grande.

Encontrei os seguintes frascos:

O que você recomendaria para meu aplicativo?

É possível usar uma biblioteca Perl de um aplicativo Java por meio de algumas ligações?

Obrigado!Mulone

Foi útil?

Solução

Eu uso o JAWS para coisas normais do Wordnet porque é fácil de usar.Para métricas de similaridade, porém, eu uso a biblioteca localizada aqui.Você também precisará baixar esse pasta, contendo dados WordNet e corpus pré-processados, para que funcione.O código pode ser usado assim, supondo que você colocou essa pasta em outra chamada "lib" na pasta do seu projeto:

JWS ws = new JWS("./lib", "3.0");
Resnik res = ws.getResnik();
TreeMap<String, Double> scores1 = res.res(word1, word2, partOfSpeech);
for(Entry<String, Double> e: scores1.entrySet())
    System.out.println(e.getKey() + "\t" + e.getValue());
System.out.println("\nhighest score\t=\t" + res.max(word1, word2, partOfSpeech) + "\n\n\n");

Isto irá imprimir algo como o seguinte, mostrando a pontuação de similaridade entre cada combinação possível de synsets representados pelas palavras a serem comparadas:

hobby#n#1,gardening#n#1 2.6043996588901104
hobby#n#2,gardening#n#1 -0.0
hobby#n#3,gardening#n#1 -0.0
highest score   =   2.6043996588901104

Existem também métodos que permitem especificar qual sentido de uma ou de ambas as palavras: res(String word1, int senseNum1, String word2, partOfSpeech), etc.Infelizmente, a documentação fonte não é JavaDoc, então você precisará inspecioná-la manualmente.A fonte pode ser baixada aqui.

Os algoritmos disponíveis são:

JWSRandom(ws.getDictionary(), true, 16.0);//random number for baseline
Resnik res = ws.getResnik();
LeacockAndChodorowlch = ws.getLeacockAndChodorow();
AdaptedLesk adLesk = ws.getAdaptedLesk();
AdaptedLeskTanimoto alt = ws.getAdaptedLeskTanimoto();
AdaptedLeskTanimotoNoHyponyms altnh = ws.getAdaptedLeskTanimotoNoHyponyms();
HirstAndStOnge hso = ws.getHirstAndStOnge();
JiangAndConrath jcn = ws.getJiangAndConrath();
Lin lin = ws.getLin();
WuAndPalmer wup = ws.getWuAndPalmer();

Além disso, é necessário que você tenha o arquivo jar do MIT JWI

Outras dicas

Há função nas mandíbulas para encontrar palavras semelhantes Aqui estão os detalhes:

adjetivesynset [] getsimilar () lança o WordNetException e aqui está link que você pode verificar: http://lyle.smu.edu/~tspell/jaws/doc/edu/smu/tspell/wordnet/adjetivesynset.html Este link ele contém detalhes que você pode usar.

Não tenho certeza se o JAWS ou o JWNL fornecem métodos para calcular a similaridade entre synsets, mas tentei ambos para pesquisar synsets e achei o JAWS mais fácil de usar.Especificamente, o simples:

    // Specifying the Database Directory
    System.setProperty("wordnet.database.dir", "C:/WordNet/2.1/dict/");

foi mais fácil para mim entender do que o requisito file_properties.xml do JWNL.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top