Generelles Synonym und Teil der Sprachverarbeitung mit nltk

8

Ich versuche, einen allgemeinen Synonym-Bezeichner für die Wörter in einem Satz zu erstellen, die signifikant sind (d. h. nicht "a" oder "the"), und ich benutze das natürliche Sprache-Toolkit (nltk) in Python dafür. Das Problem, das ich habe, ist, dass der Synonym-Finder in Nltk einen Teil der Rede Argument erfordert, um mit seinen Synonymen verknüpft werden. Mein Versuch, dies zu beheben, bestand darin, den in nltk vorhandenen vereinfachten Teil des Rede-Tags zu verwenden und dann den ersten Buchstaben zu reduzieren, um dieses Argument in den Synonym-Finder zu übertragen, was jedoch nicht funktioniert.

%Vor%

Dies ist der Code, von dem ich momentan arbeite, und wie Sie sehen können, lemme ich zuerst die Eingabe, um die Anzahl der Übereinstimmungen zu reduzieren, die ich auf lange Sicht haben werde (ich plane das auf Zehntausende von Sätzen) und theoretisch stemple ich das Wort danach, um diesen Effekt zu verstärken und die Anzahl der überflüssigen Wörter zu reduzieren, die ich erzeuge, aber diese Methode gibt fast immer Fehler in der Form der folgenden zurück:

%Vor%

Ich habe nicht viel Kontrolle über die Daten, die überfahren werden, und deshalb ist es nicht wirklich eine Option, meinen Korpus zu reinigen. Irgendwelche Ideen, wie man das lösen kann?

Ich habe mehr geforscht und habe eine vielversprechende Führung, aber ich bin mir immer noch nicht sicher, wie ich das umsetzen könnte. Im Falle eines nicht gefundenen oder falsch zugewiesenen Wortes möchte ich eine Ähnlichkeitsmetrik (Leacock Chodorow, Wu-Palmer etc.) verwenden, um das Wort mit dem nächsten korrekt kategorisierten anderen Schlüsselwort zu verknüpfen. Vielleicht in Verbindung mit einem Edit-Distanzmaß, aber auch hier konnte ich noch keine Dokumentation dazu finden.

    
Slater Victoroff 12.06.2012, 22:01
quelle

2 Antworten

7

Anscheinend ermöglicht nltk das Abrufen aller mit einem Wort verbundenen Synsets. Zugegeben, es gibt normalerweise eine Anzahl von ihnen, die unterschiedliche Wortsinne widerspiegeln. Um Synonyme funktionell zu finden (oder wenn zwei Wörter Synonyme sind), müssen Sie versuchen, den nächsten möglichen Synonymsatz zu finden, was durch eine der oben erwähnten Ähnlichkeitsmetriken möglich ist. Ich habe dazu einen Basiscode erstellt, wie unten gezeigt, wie man zwei Wörter als Synonyme findet:

%Vor%

Ich könnte versuchen, progressiv stärkere Stammalgorithmen zu implementieren, aber für die ersten paar Tests, die ich gemacht habe, hat dieser Code tatsächlich für jedes Wort funktioniert, das ich finden konnte. Wenn jemand Ideen hat, wie man diesen Algorithmus verbessern kann oder irgendetwas hat, um diese Antwort in irgendeiner Weise zu verbessern, würde ich es gerne hören.

    
Slater Victoroff 14.06.2012, 04:03
quelle
1

Können Sie Ihre Word_Set = wordnet.synset(Call) mit einer try: umbrechen und die WordNetError Ausnahme ignorieren? Sieht aus wie der Fehler, den Sie haben, ist, dass einige Wörter nicht korrekt kategorisiert werden, aber diese Ausnahme würde auch für nicht erkannte Wörter auftreten, so dass das Einfangen der Ausnahme nur eine gute Idee für mich scheint.

    
ChipJust 13.06.2012 00:11
quelle