Искать ключевое слово как существительное - PullRequest
0 голосов
/ 17 мая 2018
que = ("What's the weather like?")
lines_list = tokenize.sent_tokenize(que)
    for text in lines_list:
        tokenizer = word_tokenize(text)
        nouns = nltk.pos_tag(tokenizer)
        chunked = ne_chunk(nouns)
        print(chunked) #(S What/WP 's/VBZ the/DT weather/NN like/IN ?/.)
if ("weather/NN") in chunked:
    print("I found weather as noun")

Если вы запустите этот код, он, похоже, не распознает, что «погода / NN» находится в чанках, и я не могу понять, почему это происходит. Что-то не так с моим кодом?

Спасибо за любую помощь.

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Проблема в том, что chunked - это не строка, а последовательность кортежей из двух элементов:

[('What', 'WP'), ("'s", 'VBZ'), ('the', 'DT'), ('weather', 'NN'), ('like', 'IN'), ('?', '.')]

Итак, этот кортеж - это то, что вы должны проверять:

if ("weather", "NN") in chunked:
    print("I found weather as noun")

В целом, вы можете отладить это, посмотрев на фактические значения, вместо того, чтобы просто распечатать их str представления.Например:

for chunk in chunked:
    print(type(chunk), chunk)

… это то, как вы обнаруживаете, что это последовательность кортежей, потому что она показывает:

<class 'tuple'> ('What', 'WP') 

… в то время как строка показывает:

<class 'str'> W
<class 'str'> h
<class 'str'> a

… потому что строки - это последовательности символов, а не последовательности кортежей.


Они выглядят как кортежи строк.Но если вы хотите проверить это наверняка:

for chunk, typ in chunked:
    print(type(chunk), chunk, chunk(typ), typ)

Если это строки, вы получите что-то вроде:

<class 'str'> 'What' <class 'str'> 'WP'

… и тогда приведенный выше код будет работать.Если вместо этого вы видите что-то вроде:

<class 'nltk._spam.Eggs'> 'What' <class 'str'> 'WP'

... тогда вы, вероятно, не можете просто сделать ("weather", "NN");Вы должны посмотреть, как создать объект Eggs.

0 голосов
/ 17 мая 2018

chunked является структурой чанка, в ней есть метод __str__() или __repr__(), переопределенный таким образом, что он печатает как красивую строку, но сам по себе не является строкой, поэтому вы не можете видеть, является ли другая строка in Это.Попробуйте if ("weather/NN") in str(chunked):.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...