У меня была такая же проблема, и в большинстве случаев она разрешена
Но на этот раз ошибка сохранялась даже после выполнения всех этих действий, и, наконец, я нашел виновника.
Проблема была в xml файл, где я дал обычное строковое значение для android:id
вместо ресурса ресурса id .
MISTAKE
android:id="username"
CORRECTION
android:id="@id/username"
Отказывание вещей, связанных с
blockquote>resources
в xml-файлах, является основной причиной этой ошибки. Остерегайтесь того, что он не может быть показан как ошибка в файле макета xml.ПРИМЕЧАНИЕ
В большинстве случаев компилятор показывает вам источник ошибки в сообщении. Попробуйте сначала проверить его, прежде чем пытаться использовать другие решения
text.split()
Этого должно быть достаточно, чтобы хранить каждое слово в списке. words
уже является списком слов из предложения, поэтому нет необходимости в цикле.
Во-вторых, это может быть опечатка, но у вас есть ваш цикл немного испорчен. Если вы действительно хотите использовать append, это будет:
words.append(word)
not
word.append(words)
Разделяет строку в text
на любом последовательном прогоне пробелов.
words = text.split()
Разделите строку в text
на разделителе: ","
.
words = text.split(",")
Переменная слов будет list
и содержит слова из text
, разделенные на разделителе.
Как насчет этого алгоритма? Разделите текст на пробелы, затем нарисуйте пунктуацию. Это тщательно удаляет пунктуацию с края слов, не нанося вреда апострофам внутри таких слов, как we're
.
>>> text
"'Oh, you can't help that,' said the Cat: 'we're all mad here. I'm mad. You're mad.'"
>>> text.split()
["'Oh,", 'you', "can't", 'help', "that,'", 'said', 'the', 'Cat:', "'we're", 'all', 'mad', 'here.', "I'm", 'mad.', "You're", "mad.'"]
>>> import string
>>> [word.strip(string.punctuation) for word in text.split()]
['Oh', 'you', "can't", 'help', 'that', 'said', 'the', 'Cat', "we're", 'all', 'mad', 'here', "I'm", 'mad', "You're", 'mad']
e.g.
и Mrs.
и конечный апостроф в притяжательной frogs'
(как в frogs' legs
) являются частью этого слова, но будут разделены этим алгоритмом. Правильная обработка аббревиатур может быть грубо i> достигнута путем обнаружения разделенных точками инициализаций плюс использование словаря особых случаев (например, Mr.
, Mrs.
). Отличие притяжательных апострофов от одинарных кавычек значительно сложнее, поскольку для этого требуется разбор грамматики предложения, в котором содержится это слово.
– Mark Amery
29 January 2016 в 01:02
Я хочу, чтобы моя функция python разделила предложение (ввод) и сохранила каждое слово в списке
Метод
str().split()
делает это, он принимает строку, разделяет это в список:>>> the_string = "this is a sentence" >>> words = the_string.split(" ") >>> print(words) ['this', 'is', 'a', 'sentence'] >>> type(words) <type 'list'> # or <class 'list'> in Python 3.0
Проблема, с которой вы столкнулись, связана с опечаткой, вы написали
print(words)
вместоprint(word)
:Переименование
word
переменная вcurrent_word
, это то, что у вас было:def split_line(text): words = text.split() for current_word in words: print(words)
.. когда вы должны были сделать:
def split_line(text): words = text.split() for current_word in words: print(current_word)
Если по какой-то причине вы хотите вручную создать list в цикле for, вы должны использовать метод list
append()
, возможно, потому, что хотите записать все слова (например):my_list = [] # make empty list for current_word in words: my_list.append(current_word.lower())
Или немного более аккуратно, используя list-comprehension :
my_list = [current_word.lower() for current_word in words]
Возвращает список слов в строке, используя sep в качестве разделителя ... Если sep не указан или Нет, применяется другой алгоритм разделения: пробелы последовательного пробела рассматриваются как один разделитель, и результат не будет содержать пустых строк в начале или в конце, если строка имеет ведущее или завершающее пробелы.
>>> line="a sentence with a few words" >>> line.split() ['a', 'sentence', 'with', 'a', 'few', 'words'] >>>
shlex имеет функцию .split()
. Он отличается от str.split()
тем, что он не сохраняет кавычки и рассматривает цитируемую фразу как одно слово:
>>> import shlex
>>> shlex.split("sudo echo 'foo && bar'")
['sudo', 'echo', 'foo && bar']
Я думаю, вы сбиты с толку из-за опечатки.
Замените print(words)
на print(word)
внутри вашего цикла, чтобы каждое слово было напечатано на другой строке
В зависимости от того, что вы планируете делать с вашим предложением как список, вы можете посмотреть Natural Language Took Kit . Он в значительной степени занимается обработкой и оценкой текста. Вы также можете использовать его для решения своей проблемы:
import nltk
words = nltk.word_tokenize(raw_sentence)
Это имеет дополнительное преимущество в разделении пунктуации.
Пример:
>>> import nltk
>>> s = "The fox's foot grazed the sleeping dog, waking it."
>>> words = nltk.word_tokenize(s)
>>> words
['The', 'fox', "'s", 'foot', 'grazed', 'the', 'sleeping', 'dog', ',',
'waking', 'it', '.']
Это позволяет отфильтровать любую пунктуацию, которую вы не хотите, и использовать только слова.
Обратите внимание, что другие решения, использующие string.split()
, лучше, если вы не планируете делать какие-либо сложные манипуляции с рассылкой.
split()
полагается на пустое пространство как разделитель, поэтому он не сможет отделить дефисные слова - и разделенные фразами с длинной линией тоже не будут разделены. И если предложение содержит любые знаки препинания без пробелов, они не будут придерживаться. Для любого реального синтаксического анализа текста (например, для этого комментария) ваше предложение nltk намного лучше, чем split () `.
– hobs
14 December 2011 в 15:10
','
и "'s"
не являются словами. Обычно, если вы хотите разбить предложение выше на «слова», в знаке пунктуации вы хотите разбить запятую и получить "fox's"
как одно слово.
– Mark Amery
25 January 2016 в 18:52