2017-08-23 2 views
2

Je sais comment extraire des entités de nom avec l'aide de Stanford dans NLTK.Comment utiliser Stanford RegexNER dans NLTK?

from nltk.tag import StanfordNERTagger 
st = StanfordNERTagger('english.all.3class.distsim.crf.ser.gz') 
st.tag('Rami Eid is studying at Stony Brook University in NY'.split()) 

Cependant, j'ai également besoin d'appliquer RegexNER. Son application en Java est facile et Stanford a fourni un exemple here.

Cependant, je n'ai trouvé aucune source expliquant comment nous pouvons également l'utiliser en NLTK. Je serai reconnaissant si vous partagez vos idées et opinions.

+0

Stanford NER n'est pas basé sur regex ... – alvas

Répondre

0

Je pense que vous devriez utiliser NERClassifierCombiner pour la fonction complète, vous pouvez essayer avec l'exemple de code ci-dessous pour spécifier l'expression rationnelle.

class NERComboTagger(StanfordNERTagger): 

    def __init__(self, *args, **kwargs): 
    self.stanford_ner_models = kwargs['stanford_ner_models'] 
    kwargs.pop("stanford_ner_models") 
    super(NERComboTagger,self).__init__(*args, **kwargs) 

    @property 
    def _cmd(self): 
    return ['edu.stanford.nlp.ie.NERClassifierCombiner', 
      '-ner.model', 
      self.stanford_ner_models, 
      '-textFile', 
      self._input_file_path, 
#   '-outputFormat', 
#   self._FORMAT, 
      '-ner.applyNumericClassifiers', 
      'true', 
#   '-ner.useSUTime', 
#   'false', 
      '-regexner.mapping', 
      'edu/stanford/nlp/models/kbp/cn_regexner_mapping.tab', 
      '-regexner.validpospattern', 
      '^(NR|NN|JJ).*', 
      '-regexner.ignorecase', 
      'true'] 
+0

Nice, mais NLTK = Python, pas Java ... –

0

Pour autant que je peux dire, l'un des seuls moyens d'accéder au Stanford CoreNLP RegexNER classe Java en dehors de Java (par exemple en Python) est via ce repo GitHub:

https://github.com/dasmith/stanford-corenlp-python

Voir ma description, ici:

https://github.com/dasmith/stanford-corenlp-python/issues/33

Fondamentalement, modifier le stanford-corenlp-pythonfichier, ce qui permet au module regexner et en spécifiant le chemin d'accès à vos personnalisés entités nommées fichier:

annotators = tokenize, ssplit, pos, lemma, ner, parse, dcoref, regexner 
# regexner.mapping = path_to_entities_file, e.g. 
regexner.mapping = /home/victoria/projects/ie/entities.txt 

Vous aurez également besoin d'éditer le fichier stanford-corenlp-python corenlp.py, mettre à jour vos chemins à votre Stanford téléchargée localement CoreNLP * .jar fichiers ...