aboSamoor / polyglot

Multilingual text (NLP) processing toolkit
http://polyglot-nlp.com
Other
2.31k stars 337 forks source link

NER Index downloader Issue #61

Open tgalery opened 8 years ago

tgalery commented 8 years ago

Hi there, I'm getting an error when doing ner from a sentence. The code used to get the named entities is:

ne_tuples = [((ent.start, ent.end), ent.tag, 1.) for ent in sent.entities

It seems that the Downloader tries to read some information from a web index which results in a socket error. Any ideas on what it might be going on ? Here is the stacktrace:

/home/preceptor/miniconda2/envs/wiki/lib/python2.7/site-packages/polyglot/decorators.pyc in __get__(self, obj, cls)
     18     if obj is None:
     19         return self
---> 20     value = obj.__dict__[self.func.__name__] = self.func(obj)
     21     return value
     22 

/home/preceptor/miniconda2/envs/wiki/lib/python2.7/site-packages/polyglot/text.pyc in entities(self)
    130     prev_tag = u'O'
    131     chunks = []
--> 132     for i, (w, tag) in enumerate(self.ne_chunker.annotate(self.words)):
    133       if tag != prev_tag:
    134         if prev_tag == u'O':

/home/preceptor/miniconda2/envs/wiki/lib/python2.7/site-packages/polyglot/decorators.pyc in __get__(self, obj, cls)
     18     if obj is None:
     19         return self
---> 20     value = obj.__dict__[self.func.__name__] = self.func(obj)
     21     return value
     22 

/home/preceptor/miniconda2/envs/wiki/lib/python2.7/site-packages/polyglot/text.pyc in ne_chunker(self)
     98   @cached_property
     99   def ne_chunker(self):
--> 100     return get_ner_tagger(lang=self.language.code)
    101 
    102   @cached_property

/home/preceptor/miniconda2/envs/wiki/lib/python2.7/site-packages/polyglot/decorators.pyc in memoizer(*args, **kwargs)
     28     key = tuple(list(args) + sorted(kwargs.items()))
     29     if key not in cache:
---> 30       cache[key] = obj(*args, **kwargs)
     31     return cache[key]
     32   return memoizer

/home/preceptor/miniconda2/envs/wiki/lib/python2.7/site-packages/polyglot/tag/base.pyc in get_ner_tagger(lang)
    190 def get_ner_tagger(lang='en'):
    191   """Return a NER tagger from the models cache."""
--> 192   return NEChunker(lang=lang)

/home/preceptor/miniconda2/envs/wiki/lib/python2.7/site-packages/polyglot/tag/base.pyc in __init__(self, lang)
    102       lang: language code to decide which chunker to use.
    103     """
--> 104     super(NEChunker, self).__init__(lang=lang)
    105     self.ID_TAG = NER_ID_TAG
    106 

/home/preceptor/miniconda2/envs/wiki/lib/python2.7/site-packages/polyglot/tag/base.pyc in __init__(self, lang)
     38     """
     39     self.lang = lang
---> 40     self.predictor = self._load_network()
     41     self.ID_TAG = {}
     42     self.add_bias = True

/home/preceptor/miniconda2/envs/wiki/lib/python2.7/site-packages/polyglot/tag/base.pyc in _load_network(self)
    109     self.embeddings = load_embeddings(self.lang, type='cw')
    110     self.embeddings.normalize_words(inplace=True)
--> 111     self.model = load_ner_model(lang=self.lang, version=2)
    112     first_layer, second_layer = self.model
    113     def predict_proba(input_):

/home/preceptor/miniconda2/envs/wiki/lib/python2.7/site-packages/polyglot/decorators.pyc in memoizer(*args, **kwargs)
     28     key = tuple(list(args) + sorted(kwargs.items()))
     29     if key not in cache:
---> 30       cache[key] = obj(*args, **kwargs)
     31     return cache[key]
     32   return memoizer

/home/preceptor/miniconda2/envs/wiki/lib/python2.7/site-packages/polyglot/load.pyc in load_ner_model(lang, version)
     92   """
     93   src_dir = "ner{}".format(version)
---> 94   p = locate_resource(src_dir, lang)
     95   fh = _open(p)
     96   try:

/home/preceptor/miniconda2/envs/wiki/lib/python2.7/site-packages/polyglot/load.pyc in locate_resource(name, lang, filter)
     41   p = path.join(polyglot_path, task_dir, lang)
     42   if not path.isdir(p):
---> 43     if downloader.status(package_id) != downloader.INSTALLED:
     44       raise ValueError("This resource is available in the index "
     45                        "but not downloaded, yet. Try to run\n\n"

/home/preceptor/miniconda2/envs/wiki/lib/python2.7/site-packages/polyglot/downloader.pyc in status(self, info_or_id, download_dir)
    735     """
    736     if download_dir is None: download_dir = self._download_dir
--> 737     info = self._info_or_id(info_or_id)
    738 
    739     # Handle collections:

/home/preceptor/miniconda2/envs/wiki/lib/python2.7/site-packages/polyglot/downloader.pyc in _info_or_id(self, info_or_id)
    505   def _info_or_id(self, info_or_id):
    506     if isinstance(info_or_id, unicode):
--> 507       return self.info(info_or_id)
    508     else:
    509       return info_or_id

/home/preceptor/miniconda2/envs/wiki/lib/python2.7/site-packages/polyglot/downloader.pyc in info(self, id)
    927     if id in self._packages: return self._packages[id]
    928     if id in self._collections: return self._collections[id]
--> 929     self._update_index() # If package is not found, most probably we did not
    930                          # warm up the cache
    931     if id in self._packages: return self._packages[id]

/home/preceptor/miniconda2/envs/wiki/lib/python2.7/site-packages/polyglot/downloader.pyc in _update_index(self, url)
    829     elif source == 'mirror':
    830         index_url = path.join(self._url, 'index.json')
--> 831         data = urlopen(index_url).read()
    832 
    833     if six.PY3:

/home/preceptor/miniconda2/envs/wiki/lib/python2.7/urllib2.pyc in urlopen(url, data, timeout, cafile, capath, cadefault, context)
    152     else:
    153         opener = _opener
--> 154     return opener.open(url, data, timeout)
    155 
    156 def install_opener(opener):

/home/preceptor/miniconda2/envs/wiki/lib/python2.7/urllib2.pyc in open(self, fullurl, data, timeout)
    429             req = meth(req)
    430 
--> 431         response = self._open(req, data)
    432 
    433         # post-process response

/home/preceptor/miniconda2/envs/wiki/lib/python2.7/urllib2.pyc in _open(self, req, data)
    447         protocol = req.get_type()
    448         result = self._call_chain(self.handle_open, protocol, protocol +
--> 449                                   '_open', req)
    450         if result:
    451             return result

/home/preceptor/miniconda2/envs/wiki/lib/python2.7/urllib2.pyc in _call_chain(self, chain, kind, meth_name, *args)
    407             func = getattr(handler, meth_name)
    408 
--> 409             result = func(*args)
    410             if result is not None:
    411                 return result

/home/preceptor/miniconda2/envs/wiki/lib/python2.7/urllib2.pyc in http_open(self, req)
   1225 
   1226     def http_open(self, req):
-> 1227         return self.do_open(httplib.HTTPConnection, req)
   1228 
   1229     http_request = AbstractHTTPHandler.do_request_

/home/preceptor/miniconda2/envs/wiki/lib/python2.7/urllib2.pyc in do_open(self, http_class, req, **http_conn_args)
   1198         else:
   1199             try:
-> 1200                 r = h.getresponse(buffering=True)
   1201             except TypeError: # buffering kw not supported
   1202                 r = h.getresponse()

/home/preceptor/miniconda2/envs/wiki/lib/python2.7/httplib.pyc in getresponse(self, buffering)
   1134 
   1135         try:
-> 1136             response.begin()
   1137             assert response.will_close != _UNKNOWN
   1138             self.__state = _CS_IDLE

/home/preceptor/miniconda2/envs/wiki/lib/python2.7/httplib.pyc in begin(self)
    451         # read until we get a non-100 response
    452         while True:
--> 453             version, status, reason = self._read_status()
    454             if status != CONTINUE:
    455                 break

/home/preceptor/miniconda2/envs/wiki/lib/python2.7/httplib.pyc in _read_status(self)
    407     def _read_status(self):
    408         # Initialize with Simple-Response defaults
--> 409         line = self.fp.readline(_MAXLINE + 1)
    410         if len(line) > _MAXLINE:
    411             raise LineTooLong("header line")

/home/preceptor/miniconda2/envs/wiki/lib/python2.7/socket.pyc in readline(self, size)
    478             while True:
    479                 try:
--> 480                     data = self._sock.recv(self._rbufsize)
    481                 except error, e:
    482                     if e.args[0] == EINTR:
aboSamoor commented 8 years ago

What is the language you are trying to annotate? What is the language polyglot detects? Most probably, the server that holds the models is down.

tgalery commented 8 years ago

The language is portuguese, I'm setting the text using the language hint in the constructor and have portuguese data locally. The download attempt could be a by product of https://github.com/aboSamoor/polyglot/issues/59 .

alantian commented 8 years ago

Like in #59, could you please provide the text you have in this issue?

tgalery commented 8 years ago

so setting the language_hint to "pt" in the constructor of the Text object (see #59) the following text samples (all unicode objects) give me issues (a text object is build per each line below):

Akihiro Gono   é um lutador japonês de MMA. Já venceu Gegard Mousasi, Hector Lombard e Hayato Sakurai. 
Ayaka Wada  é uma cantora japonesa de j-pop, integrante do grupo S/mileage. Ayaka juntou-se ao Hello! Project, atraves de uma audição realizada em 2004 para entrar para o Hello! Pro Egg . Em 2010, Ayaka, juntamente com Maeda Yuuka, Ogawa Saki e Fukuda Kanon, graduaram do Hello! Pro Egg, e formaram o grupo S/mileage. 
Warwick Brown  é um ex-automobilista da Austrália. 
Katsuyuki Kawachi  é um ex-futebolista japonês. 
Kazurou Inoue  é um mangaká japonês, criador da série "Midori no Hibi" 
Kohei Miyazaki  é um futebolista profissional japônes, meia, milita no Montedio Yamagata. 
Mayuki Makiguchi  é uma dubladora japonesa, afiliada da 81 Produce. 
Kazuyoshi Nakamura  é um ex-futebolista japonês. 
Mario Benjamín Menéndez  é um militar da reserva argentino que chegou a a ocupar o cargo de General do Exército Argentino e durante a Guerra das Malvinas foi o governador militar das ilhas Ilhas Malvinas, Geórgia do Sul e Sandwich do Sul. 
Zucchero, nome artístico de Adelmo Fornaciari , é um cantor italiano. 
Régis Laconi  é um piloto de motociclismo da França. 
Taro Sekiguchi  é um motociclista japonês, que disputou a categoria 250 cm³ da MotoGP entre 1999 e 2002 e entre 2004 e 2007. 
Eleonora Maria Josefa Rosa Filipa Miguela Gabriela Rafaela Gonzaga de Orléans e Bragança e Wittelsbach , princesa de Orléans e Bragança e princesa-titular consorte de Ligne, é a oitava filha e segunda varoa de D. Pedro Henrique de Orléans e Bragança, ex-chefe da Casa Imperial do Brasil, e de Maria Isabel da Baviera. Eleonora é a oitava na linha de sucessão ao trono brasileiro. 
Kaori Inoue  é um jogadora de voleibol japonesa.Com 1,82 m de altura, Inoue é capaz de atingir 3,06 m no ataque e 3 m quando bloqueia. 
Eros Luciano Walter Ramazzotti Molina  é um cantor italiano. 
Satoru Mochizuki  é um ex-futebolista japonês. 
Joaquim Manuel Sampaio Silva, mais conhecido como Quim OIH  é um futebolista português que atua como guarda-redes. A 5 de Julho de 2004 foi feito Oficial da Ordem do Infante D. Henrique.== §Referências == 
Hiroshi Ninomiya  é um ex-futebolista japonês. 
Takahiro Yamaguchi  é um futebolista profissional japônes, defensor, milita no Shonan Bellmare. 
Alessandro Potenza  é um futebolista italiano que atualmente joga no Calcio Catania. 
Dom Fernando Arêas Rifan  é um bispo católico brasileiro, atual ordinário daAdministração Apostólica Pessoal São João Maria Vianney, bispo titular de Cedamusa.Foi ordenado sacerdote em 8 de dezembro de 1974, e juntou-se à União Sacerdotal São João Maria Vianney, fundada por D. António de Castro Mayer aquando da saída da diocese em 28 de Agosto de 1981. Em 1991, Castro Mayer morre e sucede-lhe Licínio Rangel à frente da União Sacerdotal São João Maria Vianney, que foi ordenado bispo por 3 dos 4 bispos consagrados a 30 de Junho de 1988 pelo Arcebispo Marcel Lefebvre.Aquando da peregrinação conjunta da União Sacerdotal São João Maria Vianney e da Fraternidade Sacerdotal São Pio X, em 2000, por ocasião do Jubileu, a Roma, iniciaram-se contactos com a Santa Sé para a resolução do problema.A 18 de Janeiro de 2002 foi criada a Administração Apostólica Pessoal São João Maria Vianney. D. Licínio Rangel, devido a problemas de saúde, pede ao Papa João Paulo II que nomeie um bispo auxiliar, que lhe sucederia como Administrador Apostólico. O padre Fernando Arêas Rifan, que era Vigário-Geral da Administração Apostólica recém criada, é nomeado bispo titular de Cedamusa e coadjutor do Administrador Apostólico Licínio Rangel. A ordenação episcopal foi a 18 de Agosto de 2002, com o Cardeal Castrillón Hoyos como consagrante principal, assistido por D. Licínio e pelo Arcebispo Alano Maria Pena, de Niterói.D. Licínio Rangel morreu a 16 de Dezembro de 2002 e D. Fernando sucedeu-lhe automaticamente como Administrador Apostólico. 
Kiyotaka Matsui  é um ex-futebolista japonês. 
Claudio Baglioni  é um compositor e cantor italiano. 
Masaki Aiba É um cantor e ator japonês que faz parte do Johnny's Entertainment.Ele é conhecido por fazer parte da popular banda de J-pop Arashi, juntamente com Matsumoto Jun ,Kazunari Ninomiya , Satoshi Ohno  e Sho Sakurai . 
Mario Stanić  é um ex-futebolista croata.Jogou no Željezničar, NK Dinamo Zagreb, Sporting de Gijon, Benfica, Club Brugge, Parma A.C. e Chelsea. 
Hidenori Ishii  é um futebolista profissional japônes, defensor, milita no Montedio Yamagata. 
Satoru Suzuki  é um futebolista japonês.