Jak podzielić ciąg znaków na listę?
Chcę, aby moja funkcja Pythona dzieliła zdanie (wejście) i zapisywała każde słowo na liście. Mój obecny kod dzieli zdanie, ale nie przechowuje słów jako listy. Jak mam to zrobić?
def split_line(text):
# split the text
words = text.split()
# for each word in the line:
for word in words:
# print the word
print(word)
9 answers
text.split()
To powinno wystarczyć, aby zapisać każde słowo na liście. words
jest już listą słów ze zdania, więc nie ma potrzeby stosowania pętli.
words.append(word)
Nie
word.append(words)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-01 09:17:57
Dzieli łańcuch znaków na text
na dowolne kolejne ciągi znaków.
words = text.split()
Podziel łańcuch na {[2] } na separatorze: ","
.
words = text.split(",")
Zmienna słowa Będzie list
i będzie zawierać słowa z text
podzielone na ogranicznik.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-10 11:00:34
Zwraca listę słów w łańcuchu, używając Sep jako ogranicznika ... Jeśli sep nie jest określony lub nie jest żaden, stosuje się inny algorytm dzielenia: ciągi kolejnych białych znaków są traktowane jako pojedynczy separator, a wynik nie będzie zawierał pustych łańcuchów na początku lub końcu, jeśli łańcuch ma początkowe lub końcowe białe znaki.
>>> line="a sentence with a few words"
>>> line.split()
['a', 'sentence', 'with', 'a', 'few', 'words']
>>>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-16 09:35:11
W zależności od tego, co planujesz zrobić z listą zdań, możesz spojrzeć na Zestaw języka naturalnego. Zajmuje się głównie przetwarzaniem i ewaluacją tekstu. Możesz również użyć go do rozwiązania problemu:
import nltk
words = nltk.word_tokenize(raw_sentence)
To ma dodatkową zaletę dzielenia interpunkcji.
Przykład:
>>> 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', '.']
To pozwala odfiltrować dowolną interpunkcję, której nie chcesz i używać tylko słów.
Należy pamiętać, że inne rozwiązania wykorzystujące string.split()
to lepiej, jeśli nie planujesz skomplikowanej manipulacji sentencją.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-13 14:24:18
A co z tym algorytmem? Podziel tekst na białe znaki, a następnie przycinaj znaki interpunkcyjne. To dokładnie usuwa interpunkcję z krawędzi słów, bez szkody dla apostrofów wewnątrz słów, takich jak 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']
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-15 20:35:32
Chcę, aby moja funkcja Pythona dzieliła zdanie (wejście) i zapisywała każde słowo na liście
Metoda str().split()
robi to, pobiera ciąg znaków, dzieli go na listę:
>>> 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
Problem masz z powodu literówki, napisałeś print(words)
zamiast print(word)
:
Zmiana nazwy zmiennej word
na current_word
, Oto co miałeś:
def split_line(text):
words = text.split()
for current_word in words:
print(words)
..kiedy powinieneś zrobić:
def split_line(text):
words = text.split()
for current_word in words:
print(current_word)
Jeśli z jakiegoś powodu chcesz ręcznie skonstruować listę w w przypadku pętli należy użyć metody list append()
, być może dlatego, że wszystkie słowa mają małe litery (na przykład):
my_list = [] # make empty list
for current_word in words:
my_list.append(current_word.lower())
Lub bardziej schludnie, używając rozumienia listy :
my_list = [current_word.lower() for current_word in words]
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-13 13:51:37
Shlex ma .split()
Funkcja. Różni się od str.split()
tym, że nie zachowuje cudzysłowów i traktuje cytowaną frazę jako pojedyncze słowo:
>>> import shlex
>>> shlex.split("sudo echo 'foo && bar'")
['sudo', 'echo', 'foo && bar']
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-22 20:53:34
Myślę, że jesteś zdezorientowany z powodu literówki.
Zamień print(words)
na print(word)
wewnątrz pętli, aby każde słowo było wydrukowane w innej linii
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-25 19:18:31
Możesz użyć sta (string to array)
pip install sta
Then
>>> import sta
>>> sta("some words on a list")
['some', 'words', 'on', 'a', 'list']
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-02 06:36:06