2017-02-23 3 views
10

Ich habe eine TXT-Datei von einem dänischen WordNet. Gibt es eine Möglichkeit, dies mit einer NLP-Bibliothek für Python wie NLTK zu verwenden? Wenn nicht, wie könnten Sie in einer Sprache, die von einer bestimmten Bibliothek nicht unterstützt wird, in natürlicher Sprache arbeiten? Sagen Sie auch, dass Sie die Erkennung von benannten Entitäten in einer anderen Sprache als Englisch oder Niederländisch in einer Bibliothek wie SpaCy durchführen möchten. Gibt es eine Möglichkeit, dies zu tun?Ist es möglich, ein eigenes WordNet zu einer Bibliothek hinzuzufügen?

+1

Kurze Antwort: Sie können nicht. Eine API unterstützt nur das, was sie unterstützt (und das ist einer der größten Nachteile von spaCy). Die lange Antwort ist, wenn Sie wirklich wissen, was Sie tun, könnten Sie möglicherweise die Quelle selbst bearbeiten. – spicypumpkin

+0

@Posh_Pumpkin, das ist nicht korrekt. Es ist möglich, die API zu erweitern, da es sich um ein Open Source-Projekt handelt, siehe https://github.com/nltk/nltk/pull/1621. Sogar für "spacy" glaube ich @honnibal und @ines ermutigen Beiträge: https://github.com/explosion/spaCy/blob/master/CONTRIBUTING.md – alvas

+0

@alvas Nun, ja. Zählt das nicht als Bearbeiten der Quelle? Ich bin mir ziemlich sicher, dass das nicht genau das ist, was das OP will. – spicypumpkin

Antwort

3

Gibt es eine Möglichkeit, dies mit einer NLP-Bibliothek für Python wie NLTK zu verwenden?

Sie können dies mit NLTK tun, obwohl es ein wenig peinlich ist.

Sie müssen Ihren WordNet-Korpus in das Format Open Multilingual Wordnet konvertieren, das ein einfaches tabulatorgetrenntes Format ist. Beachten Sie, dass sie bereits ein dänisches WordNet haben.

Dann sollten Sie die WordNet und Open Multilingual Wordnet Korpora in NLTK installieren, wenn Sie dies noch nicht getan haben. Dadurch wird ein Verzeichnis wie ~/nltk_data/corpora/omw/ mit einem Unterverzeichnis für jede Sprachdatei erstellt. Sie müssen Ihre corpus hinzufügen, indem Sie ein Verzeichnis für das Erstellen und die Dateien wie folgt zu benennen:

~/nltk_data/corpora/omw/xxx/wn-data-xxx.tab 

xxx kann alles sein, aber es müssen gleich in beiden Orten sein. Dieses Dateinamensmuster ist fest in NLTK here codiert.

Danach können Sie Ihr WordNet verwenden, indem Sie xxx als lang Parameter angeben. Hier ist ein Beispiel from the documentation:

>>> wn.synset('dog.n.01').lemma_names('ita') # change 'ita' to 'xxx' 
['cane', 'Canis_familiaris'] 

Wie können Sie die Verarbeitung gehen über die natürliche Sprache in einer Sprache, die nicht von einer bestimmten Bibliothek unterstützt wird?

Ich habe dies häufig mit Japanisch gemacht.

Einige Techniken schauen in Ihre Tokens - das heißt, sie überprüfen, ob ein Wort wörtlich "sagen" oder "sein" oder so ähnlich ist. Dies ist üblich bei Stemmern und Lemmatizern aus offensichtlichen Gründen. Einige Systeme verwenden Regeln basierend auf Annahmen darüber, wie Teile der Sprache in einer bestimmten Sprache interagieren (in der Regel Englisch). Sie möglicherweise in der Lage, diese Erwartungen in Ihre Sprache zu übersetzen, aber in der Regel Sie können einfach nicht diese verwenden.

Allerdings schauen viele nützliche Techniken nicht in Ihre Token überhaupt - sie egal, ob zwei Tokens gleich sind oder nicht. Diese basieren normalerweise hauptsächlich auf Features wie Labels oder Kollokationsdaten. Sie müssen möglicherweise Ihre Daten vor-Tokenizing, und Sie möchten vielleicht ein generisches Sprachmodell auf Wikipedia in der Sprache trainieren, aber das ist es. Wortvektoren, NER, Dokumentähnlichkeit sind Beispiele Probleme, bei denen die mangelnde Sprachunterstützung normalerweise kein Problem ist.

Auch sagen Sie möchten Sie benannte Entity-Erkennung in einer anderen Sprache als Englisch oder Niederländisch in einer Bibliothek wie SpaCy tun. Gibt es eine Möglichkeit, dies zu tun?

SpaCy bietet eine custom labelling für NER.Verwenden Sie es mit einer ansonsten nicht unterstützten Sprache ist nicht dokumentiert und wäre ein bisschen schwierig. Da Sie jedoch kein vollständiges Sprachmodell für NER benötigen, können Sie ein NER spezifisches Tool mit beschrifteten Beispielen verwenden.

Hier einige Beispiele Trainingsdaten für CRF++ basierend auf das CoNLL Format:

He  PRP B-NP 
reckons VBZ B-VP 
the  DT B-NP 
current JJ I-NP 
account NN I-NP 
deficit NN I-NP 
will  MD B-VP 
narrow VB I-VP 
to  TO B-PP 
only  RB B-NP 
#   # I-NP 
1.8  CD I-NP 
billion CD I-NP 
in  IN B-PP 
September NNP B-NP 
.   . O 

He  PRP B-NP 
reckons VBZ B-VP 
.. 

Diese Art von Format, das von mehreren CRF oder anderen NER-Tool unterstützt wird. CRFSuite ist eins mit Python wrapper.

Für diese Art von Daten interessiert sich der Algorithmus nicht wirklich dafür, was in der ersten Spalte steht. Daher ist die Sprachunterstützung kein Problem.

Hoffe, dass hilft!

Verwandte Themen