Size: a a a

Natural Language Processing

2018 May 04

AA

Ali Abdullaev in Natural Language Processing
Скорее всего ты столкнешься с проблемами производительности, но это решаемая задача. Хотя если брать только питер то будет ок
источник

AK

Alexander Kukushkin in Natural Language Processing
Dmitry Malyshev
Всем привет! Подскажите, какие есть способы вытаскивания названия улиц, проспектов, названий метро из текста, если они указаны неявно? Например, на Лиговском, Лиговке вместо пр. Лиговский?
Можно попробовать использовать контекст, натренировать, например, CRF-теггер. В качестве одной из фичей использовать факт, что слово есть в словаре улиц. Словарь можно сделать из ФИАСа
источник

DM

Dmitry Malyshev in Natural Language Processing
Alexander Kukushkin
Можно попробовать использовать контекст, натренировать, например, CRF-теггер. В качестве одной из фичей использовать факт, что слово есть в словаре улиц. Словарь можно сделать из ФИАСа
Благодарю
источник
2018 May 07

NM

Natasha Murashkina in Natural Language Processing
Привет! Подскажите, пожалуйста, почему NamesExtractor()('Анна') выдает Matches('Анна', []), хотя NamesExtractor()('Анна Магдолина')  выдает Matches('Анна Магдолина', [Match([MorphTagToken('Анна', [0, 4), 'RU', 'I', [Form('анна', Grams(NOUN,Name,anim,femn,nomn,sing))])], [0, 4)), Match([MorphTagToken('Магдолина', [5, 14), 'RU', 'I', [Form('магдолина', Grams(NOUN,Name,anim,femn,nomn,sing))])], [5, 14))])? Не понимаю логику.
источник

AK

Alexander Kukushkin in Natural Language Processing
Попробуйте вместо NamesExtractor SimpleNamesExtractor. Отличие и ответ на ваш вопрос есть в доке http://natasha.readthedocs.io/ru/latest/#simplenamesextractor
источник

NM

Natasha Murashkina in Natural Language Processing
Спасибо!
источник
2018 May 08

b

bard009 in Natural Language Processing
Привет всем, а кто нибудь пытался параллелить наташу?
Я вот думал попробовать через multiprocessing.pool, но получил вот такую ошибку:
_pickle.PicklingError: Can't pickle <functools._lru_cache_wrapper object at 0x7f7d73c91048>: it's not the same object as yargy.morph.MorphAnalyzer.__call__
источник

DV

Dima Veselov in Natural Language Processing
Привет, сделай по инстансу парсеру на процесс, тексты клади в queue, в процессах забирай оттуда и передавай в локальный инстанс парсера
Примерно так оно параллелится)
источник

b

bard009 in Natural Language Processing
Вот кстати пример с некорректной работой.
extractor = natasha.MoneyExtractor()
a = extractor('Стоимость квартиры -5,3млн. рублей.')
print(a.as_json[0]['fact']['amount'])

выдает 5030000.0
источник

AS

Alexsey Shestacov in Natural Language Processing
Народ порекомендуйте набор фичей для обучения ранжированию
источник

AS

Alexsey Shestacov in Natural Language Processing
Что нибудь менее тривиальное чем tf-idf
источник

DB

Dmitry Bohdanov in Natural Language Processing
Тут к примеру используют такие фичи https://www.researchgate.net/publication/237252504_Sentence_Extraction_Based_Single_Document_Summarization

Position of the sentence in input document
Presence of the verb in the sentence
Length of the sentence
Term frequency
Named entity tag NE
Font style
источник

AS

Alexsey Shestacov in Natural Language Processing
Спасибо!
источник

AS

Alexsey Shestacov in Natural Language Processing
Хочется еще идей
источник
2018 May 09

I

I Апрельский in Natural Language Processing
друзья, подскажите, пожалуйста.
я вот добавил в токенайзер правило для урлов. токенизирует в итоге как и хотелось.

но мне еще хочется заменить найденные урлы на как-то плейсхолдер типа URL_TOKEN.

можно ли  это делать где-то внутри токенайзера? или лучше просто пройтись по получившимся токенам и заменить то, что надо, глядя на их тип? а потом пересобрать текст обратно?
источник

AK

Alexander Kukushkin in Natural Language Processing
Можно найти урлы matches = Parser(rule(type(<URL>)), tokenizer=...) , где <URL> название правила для урлов, потом вручную заменить их в тексте для это можно использовать match.span
источник

I

I Апрельский in Natural Language Processing
понял. через спаны, наверняка, будет эффективнее.
а как бы сделать так, чтобы разобрать 1 раз, а потом переиспользоваться для разных правил? может это микрооптимизация -- токенизация вроде сильно быстрее парсера. но по-крайней мере для лучшего понимания будет полезно :).
источник

I

I Апрельский in Natural Language Processing
а может как-то сюда сразу токены отдавать?
https://github.com/natasha/yargy/blob/master/yargy/parser.py#L188
источник

AK

Alexander Kukushkin in Natural Language Processing
да, Parser принимает вторым аргументом токенизатор. Стандартный токенизатор принимает текст, возвращает токены. Можно сделать такой токенизатор, который принимает токены и возвращает токены, то есть ничего не делает.

class IdTokenizer(Tokenizer):
   def init(self, tokenizer):
       self.tokenizer = tokenizer

   def split(self, text):
       return self.tokenizer.split(text)

   def check_type(self, type):
       return self.tokenizer.check_type(type)

   @property
   def morph(self):
       return self.tokenizer.morph

   def call(self, tokens):
       return tokens

и дальше Parser(RULE, tokenizer=IdTokenizer(MorphTokenizer()))
источник

I

I Апрельский in Natural Language Processing
красиво! спасибо.

кстати тут можно код оформлять через 3 `
def __call__(self, tokens):
  return tokens
источник