Как найти слово - первая буква будет заглавной, а другая будет ниже - PullRequest
1 голос
/ 31 марта 2019

Постановка задачи: отфильтруйте эти слова из полного набора текста6, имея первую букву в верхнем регистре и все остальные буквы в нижнем регистре.Сохраните результат в переменной title_words.выведите количество слов, присутствующих в title_words.

Я попробовал все возможные способы найти ответ, но не знаю, где я отстаю.

import nltk
from nltk.book import text6
title_words = 0
for item in set(text6):
    if item[0].isupper() and item[1:].islower():
        title_words += 1
print(title_words)

Я пытался таким образома также:

title_words = 0
for item in text6:
    if item[0].isupper() and item[1:].islower():
        title_words += 1
print(title_words)

Я не уверен, сколько из них считает нужным, независимо от того, идет ли подсчет, это не позволяет мне пройти испытание.Пожалуйста, дайте мне знать, если я делаю что-то не так в этом коде

Ответы [ 4 ]

0 голосов
/ 31 марта 2019

Я думаю, что проблема с set(text6). Я предлагаю вам перебрать text6.tokens.

Обновление, объяснение

Код, который вы указали, правильный.

Проблема в том, что текст может содержать одни и те же слова несколько раз. Выполнение set(words) уменьшит общее количество доступных слов, поэтому вы начнете с неполного набора данных.

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

0 голосов
/ 31 марта 2019

Попробуйте регулярные выражения:

>>> import re
>>> from nltk.book import text6
>>>
>>> text = ' '.join(set(text6))
>>> title_words = re.findall(r'([A-Z]{1}[a-z]+)', text)
>>> len(title_words)
461
0 голосов
/ 31 марта 2019

В text6 имеется 50 одноэлементных элементов (элементов длиной один), однако ваш код не будет проходить ни один из них как успешный, например, «I» или «W» и т. Д. Это правильно, или вам требуются слова минимальная длина 2?

0 голосов
/ 31 марта 2019

В вопросе «Сохраните результат в переменной title_words. Напечатайте количество слов, присутствующих в title_words.»

Результатом фильтрации списка элементов является список элементов того же типа.В вашем случае фильтрация списка text6 (при условии, что это список строк) приведет к (меньшему) списку строк.Ваша title_words переменная должна быть этим фильтрованным списком, а не количеством строк;количество строк будет равно длине списка.

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

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