web-dev-qa-db-ja.com

文字列をリストに分割する方法

私のPython関数に文章(入力)を分割して各Wordをリストに格納させたい。私の現在のコードは文を分割しますが、リストとして単語を格納しません。それ、どうやったら出来るの?

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)
513
Thanx
text.split()

これは各Wordをリストに格納するのに十分なはずです。 wordsはすでに文中の単語のリストなので、ループする必要はありません。

第二に、それはタイプミスかもしれませんが、あなたはあなたのループを少し混乱させています。あなたが本当にappendを使いたいのであれば、それは次のようになります。

words.append(Word)

ではない

Word.append(words)
442
nstehr

連続する空白文字の実行時に文字列をtextに分割します。

words = text.split()      

区切り文字:","textにストリングを分割します。

words = text.split(",")   

Words変数はlistになり、区切り文字で分割されたtextからの単語を含みます。

418
zalew

str.split()

Sepを区切り文字として使用して、文字列内の 単語のリスト を返します。sepが指定されていないかNoneである場合は、別の分割アルゴリズムが適用されます。文字列の先頭または末尾に空白がある場合、結果の先頭または末尾に空の文字列は含まれません。

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

リストとしての文をどうするつもりかによっては、 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()を使った他の解決策は、文の複雑な操作をするつもりがないならばより良いことに注意してください。

[編集済み]

51
tgray

このアルゴリズムはどうですか?空白でテキストを分割し、句読点を削除します。これは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']
26
Colonel Panic

私は自分のpython関数に文章(入力)を分割してリストに各Wordを格納してほしい

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ループでリストを手動で作成したい場合は、おそらくlist append()メソッドを使用します。おそらく、すべての単語を小文字にしたいからです(たとえば)。

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]
15
dbr

shlex には .split() 関数があります。引用符を保存せず、引用句を単一のWordとして扱うという点でstr.split()とは異なります。

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

単語/文 のすべての文字をリストに含めるには、次のようにします。

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


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

私はあなたがタイプミスのために混乱していると思います。

ループ内でprint(words)print(Word)に置き換えると、すべてのWordが別の行に印刷されます。

4
Aditya Mukherji