6
votes

Word Net - Word Synonymes et constructions de mots associés - Java ou Python

Je cherche à utiliser Wordnet pour rechercher une collection de termes similaires d'un ensemble de termes de base.

Par exemple, le mot "découragé" - Synonymes potentiels pourrait être: décourageant, glum, dissuasif, pessimiste .

Je voulais aussi identifier les bi-grammes potentiels tels que; Battre, rejetez, cédé dans etc.

Comment puis-je faire l'extraction de ces informations à l'aide de Java ou Python? Y a-t-il des bases de données WordNet hébergées / interfaces Web qui permettraient une telle interrogation?

Merci!


0 commentaires

3 Réponses :


3
votes

Ce sont deux problèmes différents.

1) WordNet et Python. Utilisez NLTK, il a une belle Interface sur WordNet . Vous pouvez écrire quelque chose par vous-même, mais honnêtement, pourquoi rendre la vie difficile? Lingpipe a probablement également quelque chose de construit mais NLTK est beaucoup plus facile à utiliser. Je pense que NLTK télécharge simplement une base de données NTLK, mais je suis à peu près sûr qu'il y a des API de parler à WordNet.

2) Pour obtenir de bigrams dans NLTK Suivez ce tutoriel . En général, vous vous jetez du texte, puis itérale sur la phrase pour obtenir tous les N-grammes pour chaque mot en regardant en avant et en arrière.


3 commentaires

Merci pour les liens. De mes tests avec WordNet, certaines phrases telles que "battement bas" ne peuvent pas être identifiées, est-ce correct?


Si vous utilisez WordNet Online, vous pouvez voir des synonymes: WordNetweb.princeton.edu/perl/...


Peut-être que la version en ligne est un nouveau DB de mots?



2
votes

Comme alternative à NLTK, vous pouvez utiliser un de points d'extrémité SPARQL WordNet disponibles pour récupérer de telles informations. Exemple de requête: xxx

dans Java Universe, jena et sésame frameworks peut être utilisé.


1 commentaires

Si je remplace 'Run' avec 'Bicycle', des résultats que je reçois vélo, vélo, cycle, mais aussi roue et pédale <- pourquoi ces 2 derniers?



3
votes

Il est plus facile de comprendre les données de WordNet en regardant aux fichiers PROG. Ils sont documentés ici:

http://wordet.princeton.edu/wordnet /man/prologdb.5wn.html

Les termes WordNet sont un groupe dans des synchysées. Un synset est un maximal Synonyme Set. Les synchysées ont une clé primaire afin qu'elles puissent être utilisées dans des relations sémantiques.

répondant à votre première question, vous pouvez énumérer les différents Senses et Synonymes correspondants d'un mot comme suit: xxx

exemple: xxx

pour la deuxième partie de votre question, Les termes Wordnet sont séquences de mots. Afin que vous puissiez rechercher ces termes Wordnet Pour les mots comme suit: xxx

exemple: xxx

Cela vous donnerait des N-grammes potentiels, mais pas tellement variation morphologique. Wordnet l'expose également certains relations lexicales, qui pourraient être utiles.

Mais les deux requêtes des prologs que j'ai données ne sont pas très efficaces. Le problème est le manque d'indexation de mots. Un java La mise en œuvre pourrait bien sûr mettre en œuvre quelque chose de mieux. Imaginez simplement quelque chose: xxx

Certains prologs peuvent faire la même chose, par une directive d'indexation, il est possible d'indiquer au système Prolog à indexer sur plusieurs arguments pour un prédicat.

mettre en place un service Web ne devrait pas être aussi difficile, non plus en Java ou Prolog. De nombreux systèmes de prologs permettent facilement l'intégration Programmes de prologs dans les serveurs Web et Java Champions Servlets.

Une liste de prologs prenant en charge des serveurs Web peuvent être trouvés ici:

http://en.wikipedia.org/wiki/comparison_of_prolog_implementations#OPerating_system_and_web-related_features

Cordialement >


2 commentaires

Merci pour cette information, très très utile. Question rapide, je ne suis toujours pas sûr à 100% à ce sujet, mais si possible, quelle serait la meilleure façon de relier un mot comme «découragé» pour «battre» de manière programmable?


Dépend du "lien" et du langage de programmation. Dans WordNet, il existe deux types de "liens", sémantiques et lexicaux. Via Prolog, pour un lien sémantique, vous affirmeriez un lien de fait (Synset_id1, Synset_ID2). Pour un lien lexical, vous affirmeriez un lien de fait (Synset_id1, Word_num1, Synset_id2, Word_Num2). En Java, vous utiliseriez votre datrastructure / service approprié. Ou vous mettez les deux mots dans le même synchronisation ou créez un nouveau statut de synchronisation où ils sont ensemble. Le plus tard s'applique au cas où votre "lien" devrait représenter le même sens.