Я хочу, чтобы моя функция Python разделяла предложение (вход) и сохраняла каждое слово в списке. Мой текущий код разбивает предложение, но не хранит слова в виде списка. Как я могу это сделать?
def split_line(text):
# split the text
words = text.split()
# for each word in the line:
for word in words:
# print the word
print(words)
python
list
split
text-segmentation
Thanx
источник
источник
print(word)
качестве последней строки.Ответы:
Этого должно быть достаточно для хранения каждого слова в списке.
words
это уже список слов из предложения, поэтому цикл не нужен.Во-вторых, это может быть опечатка, но у вас немного испортился цикл. Если вы действительно хотите использовать append, это будет:
не
источник
Разбивает строку
text
на любые последовательные пробелы.Разделить строку в
text
ограничителе:","
.Переменная words будет a
list
и будет содержать слова изtext
split в разделителе.источник
str.split ()
источник
В зависимости от того, что вы планируете делать со своим предложением в виде списка, вы можете посмотреть на Natural Language Took Kit . Это имеет дело с обработкой текста и оценкой. Вы также можете использовать его для решения вашей проблемы:
Это имеет дополнительное преимущество разделения пунктуации.
Пример:
Это позволяет отфильтровывать любые знаки препинания, которые вам не нужны, и использовать только слова.
Обратите внимание, что другие решения
string.split()
лучше использовать , если вы не планируете делать какие-либо сложные манипуляции с предложением.[Изменено]
источник
split()
полагается на пробел в качестве разделителя, поэтому он не сможет разделить дефисные слова - и фразы, разделенные длинным тире, тоже не смогут разделиться. И если предложение содержит знаки препинания без пробелов, они не будут вставлены. Для любого реального анализа текста (например, для этого комментария) ваше предложение nltk намного лучше, чем split () `.','
а"'s"
не словами. Обычно, если вы хотите разбить вышеприведенное предложение на «слова» с учетом пунктуации, вам нужно убрать запятую и получить"fox's"
как одно слово.Как насчет этого алгоритма? Разделите текст на пустое место, затем обрежьте знаки препинания. Это тщательно удаляет пунктуацию с края слов, не нанося вреда апострофам внутри слов, таких как
we're
.источник
e.g.
иMrs.
и конечный апостроф в притяжательномfrogs'
(как вfrogs' legs
) являются частью слова, но этот алгоритм будет исключен. Корректная обработка аббревиатур может быть примерно достигнута путем обнаружения инициализмов, разделенных точками, и использования словаря особых случаев (напримерMr.
,Mrs.
) Различить притяжательные апострофы из одинарных кавычек значительно сложнее, так как требуется анализ грамматики предложения, в котором содержится слово.str().split()
Метод делает это, он принимает строку, разбивает его в список:У вас проблема из-за опечатки, вы написали
print(words)
вместоprint(word)
:Переименование
word
переменной вcurrent_word
, вот что у вас было:.. когда вы должны были сделать:
Если по какой-то причине вы хотите вручную создать список в цикле for, вы должны использовать
append()
метод list , возможно, потому что вы хотите использовать все слова в нижнем регистре (например):Или, более аккуратно, используя понимание списка :
источник
Шлекс имеет
.split()
функцию. Он отличается отstr.split()
того, что не сохраняет кавычки и рассматривает цитируемую фразу как одно слово:источник
Если вы хотите, чтобы все символы слова / предложения в списке, сделали это:
источник
Я думаю, что вы запутались из-за опечатки.
Заменить
print(words)
сprint(word)
внутри цикла, что каждое слово напечатано на отдельной строкеисточник