문자열을 목록으로 나누는 방법?


574

파이썬 함수가 문장 (입력)을 나누고 각 단어를 목록에 저장하고 싶습니다. 내 현재 코드는 문장을 분할하지만 단어를 목록으로 저장하지 않습니다. 어떻게합니까?

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)

1
이 코드의 어떤 부분이 작동하지 않습니까? 오류 메시지 나 발생한 문제를 제공 할 수 있습니까?
— S.Lott

4
그대로, 목록의 각 단어에 대한 전체 단어 목록을 인쇄하게됩니다. 나는 print(word)당신이 마지막 줄로 사용하려고 생각합니다 .
— tgray

답변:


487
text.split()

각 단어를 목록에 저장하기에 충분해야합니다. words이미 문장의 단어 목록이므로 루프가 필요하지 않습니다.

둘째, 오타 일 수도 있지만 루프가 약간 엉망입니다. 실제로 append를 사용하고 싶다면 다음과 같습니다.

words.append(word)

아니

word.append(words)

447

text연속 된 공백 행 에서 문자열을 분할합니다 .

words = text.split()      

text구분 기호 에서 문자열을 분할하십시오 ",".

words = text.split(",")   

단어 변수는 a가 list되고 text분리 문자 에서 분리 된 단어가 포함 됩니다.


86

str.split ()

sep를 구분 기호로 사용하여 문자열 의 단어 목록을 반환합니다. sep가 지정되지 않았거나 없음 인 경우 다른 분할 알고리즘이 적용됩니다. 연속 공백 실행은 단일 구분 기호로 간주되며 결과에는 다음이 포함됩니다. 문자열에 선행 또는 후행 공백이 있으면 시작 또는 끝에 빈 문자열이 없습니다.

>>> line="a sentence with a few words"
>>> line.split()
['a', 'sentence', 'with', 'a', 'few', 'words']
>>> 


52

목록으로 한 문장으로 무엇을하려고하는지에 따라 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()문장의 복잡한 조작을 계획하지 않으면 다른 솔루션을 사용 하는 것이 좋습니다.

[편집]


5
split()공백으로 구분 기호를 사용하므로 하이픈으로 구분 된 단어를 구분하지 못하고 긴 대괄호로 구분 된 구도 분리되지 않습니다. 그리고 문장에 공백이없는 문장 부호가 포함되어 있으면 문장이 고착되지 않습니다. 실제 텍스트 파싱 (이 주석과 같은)의 경우 nltk 제안이 split ()`보다 훨씬 좋습니다.
— hobs December

2
이 단어를 "단어"로 나누는 것으로 특성화하지는 않지만 잠재적으로 유용합니다. 모든 일반 영어 정의에 따라, ','그리고 "'s"단어 수 없습니다. 일반적으로 문장을 인식하는 방식으로 위의 문장을 "단어"로 나누려면 쉼표를 제거하고 "fox's"한 단어로 표시해야합니다.
— Mark Amery

1
Python 2.7+ 2016 년 4 월 기준
— AnneTheAgile

31

이 알고리즘은 어떻습니까? 공백으로 텍스트를 분할 한 다음 문장 부호를 자릅니다. 이렇게하면 단어 내부의 어포 스트로피를 손상시키지 않으면 서 단어의 가장자리에서 구두점을주의해서 제거합니다 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']

4
멋지지만 일부 영어 단어에는 실제로 구두점을 포함합니다. 예를 들면, 후행 도트 e.g.와 Mrs., 상기 소유의 후단 아포스트로피 frogs'(같이가 frogs' legs) 단어의 일부이지만,이 알고리즘에 의해 제거된다. 운반 약어는 정확하게 할 수있다 대략 점으로 구분 이니셜 검출 플러스 특별한 경우 (등의 사전을 사용하여 달성 Mr., Mrs.). 작은 따옴표에서 소유 한 아포스트로피를 구별하는 것은 단어가 포함 된 문장의 문법을 파싱해야하기 때문에 매우 어려워집니다.
— Mark Amery

2
@MarkAmery 당신이 맞아요. 그 이후로 em 대시와 같은 일부 문장 부호는 공백없이 단어를 분리 할 수 ​​있습니다.
— 대령 패닉

16

파이썬 함수가 문장 (입력)을 나누고 각 단어를 목록에 저장하고 싶습니다.

이 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)

어떤 이유로 for 루프에서 목록을 수동으로 구성하려면 append()모든 단어를 소문자로 만들고 싶기 때문에 list 메서드를 사용합니다 .

my_list = [] # make empty list
for current_word in words:
    my_list.append(current_word.lower())

또는 목록 이해력을 사용하여 조금 더 깔끔합니다 .

my_list = [current_word.lower() for current_word in words]

12

shlex 에는 .split()기능이 있습니다. str.split()따옴표를 유지하지 않고 따옴표로 묶은 문구를 한 단어로 취급한다는 점과 다릅니다 .

>>> import shlex
>>> shlex.split("sudo echo 'foo && bar'")
['sudo', 'echo', 'foo && bar']

10

단어 / 문장 을 모두 목록에 넣으려면 다음과 같이하십시오.

print(list("word"))
#  ['w', 'o', 'r', 'd']


print(list("some sentence"))
#  ['s', 'o', 'm', 'e', ' ', 's', 'e', 'n', 't', 'e', 'n', 'c', 'e']

4

오타 때문에 혼란 스럽다고 생각합니다.

교체 print(words)와 print(word)루프 내부의 모든 단어는 다른 줄에 인쇄 한합니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.