nlp - Как определить, указывает ли слово в предложении на цвет / часть тела / транспортное средство

Итак, как следует из названия, я хотел бы знать, указывает ли определенное слово в предложении на

1] Цвет

The grass is green.

Следовательно "зеленый" - это цвет

2] Часть тела

Her hands are soft

Следовательно, «руки» - это часть тела.

3] Автомобиль

I am driving my car on the causeway

Следовательно, «автомобиль» - это средство передвижения.

В подобных проблемах парсеры - одно из возможных эффективных решений. Стэнфордский парсер, например, был предложен на аналогичный вопрос

Как узнать, если слово в предложении указывает на город

Теперь проблема в том, что анализатор Стэнфорда можно использовать для обнаружения:

LOCATION
ORGANIZATION
DATE
MONEY
PERSON
PERCENT
TIME

Однако, если вы хотите попытаться обнаружить что-то еще, word-net может быть вариантом, как упоминалось в аналогичном вопросе.

Как сделать Я перечисляю все английские термины в предложении, обозначающем животное?

Один из ответов предполагал использование сети wordnet и отношения гипонима / гиперонима. В ответе также упоминается существительное .animal файл wordnet.

По приведенной ниже ссылке показан список всех других файлов в сети Wordnet https://wordnet.princeton.edu/man/lexnames.5WN.html

Мой подход заключается в том, что я могу использовать

1]

(noun.body FOR body parts)

2]

(noun.artifact FOR vehicles)

3]

 The (hyponym/hypernym) relationship can be used to detect if word is pointing to a color or not.

Так будет ли это допустимый подход?

И как я могу использовать (гипоним / гиперним) ворднет?

ПРИМЕЧАНИЕ: я планирую использовать: JWI (интерфейс MIT Java Wordnet)


person Abdelrahman Shoman    schedule 11.07.2015    source источник
comment
Вы должны использовать ключевое слово Named-Entity Recognition (NER), чтобы найти дополнительную информацию.   -  person clemtoy    schedule 11.07.2015
comment
Что касается цветов, вам следует составить собственный словарь вручную (или найти словарь в Интернете). Цветов не так много и было бы надежнее.   -  person clemtoy    schedule 11.07.2015
comment
@clemtoy Что бы NER добавил, что не может добавить wordnet?   -  person Abdelrahman Shoman    schedule 11.07.2015
comment
@clemtoy что бы вы порекомендовали в качестве источника для всего списка цветов?   -  person Abdelrahman Shoman    schedule 11.07.2015
comment
NER - это не инструмент, это название вашей проблемы. Я просто хотел бы указать, что ваша проблема известна как проблема NER, поэтому вам следует найти дополнительную информацию. Вы можете составить словарь цветов, анализируя этот список в Википедии. (Извините, я не могу отметить ваше имя в своем комментарии, так как он не работает)   -  person clemtoy    schedule 11.07.2015
comment
@clemtoy Если я не ошибаюсь, НПП Стэнфорда пытается решить эту проблему. Вопрос в том, что насчет классов, которые он не распознает. Итак, он распознает места, но как насчет транспортных средств, например   -  person Abdelrahman Shoman    schedule 11.07.2015
comment
@clemtoy и что касается списка цветов в Википедии, это может быть полезно. Но если используется такое слово, как красноватый, как я могу его обнаружить. Можно ли здесь использовать wordnet?   -  person Abdelrahman Shoman    schedule 11.07.2015
comment
Давайте продолжим это обсуждение в чате.   -  person clemtoy    schedule 11.07.2015
comment
NER - это сложный метод, который можно использовать для решения подобных проблем. Рассмотрим это как пример, когда Роберт Грин ехал на синей машине. Если вы используете лексикон, вы, вероятно, в конечном итоге пометите зеленый и синий как цвета, но на самом деле зеленый здесь не цвет. Классификаторы NER могут научиться помечать слова с учетом их контекста. Поэтому для вашего варианта использования я бы посоветовал создать собственный классификатор NER для обработки любого класса, который вы хотите.   -  person roopalgarg    schedule 14.07.2016


Ответы (1)


Ссылаясь на подход гипонимии / гипернимии, это потребует изучения дерева словарной сети и его отношений между словами.

гипонимы слова (от Synset, если быть более точным) представляют концепции, которые имеют более конкретный характер, в то время как гиперонимы представляют концепции в большей степени вообще в природе. По аналогии с древовидной структурой Wordnet вы можете рассматривать гипонимы как дочерние слова (node), на которое вы смотрите, с гиперонимами, которые являются родители этого слова.

В качестве примера возьмем гипонимы и гиперонимы слова dog:

dog = wn.synsets('dog')[0]
print(dog.hypernyms())
print(dog.hyponyms())

дает следующие результаты:

[Synset('canine.n.02'), Synset('domestic_animal.n.01')]

[Synset('basenji.n.01'), Synset('corgi.n.01'), Synset('cur.n.01'), 
Synset('dalmatian.n.02'), Synset('great_pyrenees.n.01'), S 
Synset('griffon.n.02'), Synset('hunting_dog.n.01'), Synset('lapdog.n.01'), 
Synset('leonberg.n.01'), Synset('mexican_hairless.n.01'), 
Synset('newfoundland.n.01'), Synset('pooch.n.01'), Synset('poodle.n.01'), 
Synset('pug.n.01'), Synset('puppy.n.01'), Synset('spitz.n.01'), 
Synset('toy_dog.n.01'), Synset('working_dog.n.01')]

Подобным образом, если бы мы хотели, например, знать, какие слова представляют цвета, мы могли бы исследовать гиперонимы различных слов, представляющих цвета, надеясь, что у них будет общий предок (гипероним). В этом смысле я провел следующие эксперименты:

print(wn.synsets('green')[0].hypernyms())
print(wn.synsets('blue')[0].hypernyms())
print(wn.synsets('red')[0].hypernyms())
print(wn.synsets('yellow')[0].hypernyms())

все они имеют один и тот же гиперонимный список:

[Synset('chromatic_color.n.01')]

Также

print(wn.synsets('black')[0].hypernyms())
print(wn.synsets('gray')[0].hypernyms())

дать результат

[Synset('achromatic_color.n.01')]

Следующее, что мы можем сделать, это распечатать все гипонимы этих результирующих синсетов:

print(wn.synset('chromatic_color.n.01').hyponyms())
print(wn.synset('chromatic_color.n.01').hyponyms())

которые дают результаты

[Synset('blond.n.02'), Synset('blue.n.01'), Synset('brown.n.01'), 
Synset('complementary_color.n.01'), Synset('green.n.01'), 
Synset('olive.n.05'), Synset('orange.n.02'), Synset('pastel.n.01'), 
Synset('pink.n.01'), Synset('purple.n.01'), Synset('red.n.01'), 
Synset('salmon.n.04'), Synset('yellow.n.01')]

[Synset('black.n.01'), Synset('gray.n.01'), Synset('white.n.02')]

Тот же метод можно применить для изучения параметров, относящихся к частям тела или транспортным средствам.

Кроме того, в случае производных слов, таких как красноватый, есть два известных мне метода обхода их отсутствия:

  • Создание токенизированного текста с помощью Porter Stemmer (см. эту ссылку)
  • Использование Morphy для получения базовых форм, что позволяет вам искать полученные слова в Wordnet (см. эту ссылку для получения подробной информации о Морфи). Я бы порекомендовал этот метод, поскольку выделение слов потенциально может дать слова, которых нет в Wordnet.
person Bogdan Kandra    schedule 20.03.2018