Преобразование строки в список слов?
Я пытаюсь преобразовать строку в список слов, используя python. Я хочу сделать что-то вроде следующего:
string = 'This is a string, with words!'
Затем преобразуется в нечто вроде этого:
list = ['This', 'is', 'a', 'string', 'with', 'words']
Обратите внимание на отсутствие знаков препинания и пробелов. Каким будет самый быстрый способ этого?
Ответы
Ответ 1
Попробуйте это:
import re
mystr = 'This is a string, with words!'
wordList = re.sub("[^\w]", " ", mystr).split()
Как это работает:
Из документов:
re.sub(pattern, repl, string, count=0, flags=0)
Возвращает строку, полученную путем замены крайнего левого не перекрывающегося вхождения шаблона в строке заменой repl. Если шаблон не найден, строка возвращается без изменений. repl может быть строкой или функцией.
так в нашем случае:
шаблон - любой не алфавитно-цифровой символ.
[\ w] означает любой буквенно-цифровой символ и равен набору символов
[A-Za-z0-9_]
от А до Я, от А до Я, от 0 до 9 и подчеркивание.
поэтому мы сопоставляем любой не алфавитно-цифровой символ и заменяем его пробелом.
а затем мы разделяем его(), который разбивает строку на пробелы и преобразует ее в список
так что "привет мир"
становится "Привет, мир"
с re.sub
а затем ['привет', 'мир']
после split()
дайте мне знать, если возникнут какие-либо сомнения.
Ответ 2
Я думаю, что это самый простой способ для кого-то, кто наткнулся на этот пост, учитывая поздний ответ:
>>> string = 'This is a string, with words!'
>>> string.split()
['This', 'is', 'a', 'string,', 'with', 'words!']
Ответ 3
Для этого достаточно сложно. Для ваших исследований он известен как токенизация слова. Вы должны посмотреть NLTK, если хотите посмотреть, что сделали другие, а не начинать с нуля:
>>> import nltk
>>> paragraph = u"Hi, this is my first sentence. And this is my second."
>>> sentences = nltk.sent_tokenize(paragraph)
>>> for sentence in sentences:
... nltk.word_tokenize(sentence)
[u'Hi', u',', u'this', u'is', u'my', u'first', u'sentence', u'.']
[u'And', u'this', u'is', u'my', u'second', u'.']
Ответ 4
Самый простой способ:
>>> import re
>>> string = 'This is a string, with words!'
>>> re.findall(r'\w+', string)
['This', 'is', 'a', 'string', 'with', 'words']
Ответ 5
Используя string.punctuation
для полноты:
import re
import string
x = re.sub('['+string.punctuation+']', '', s).split()
Это также обрабатывает символы перевода строки.
Ответ 6
Хорошо, вы могли бы использовать
import re
list = re.sub(r'[.!,;?]', ' ', string).split()
Обратите внимание, что как string
, так и list
являются именами встроенных типов, поэтому вы, вероятно, не хотите использовать их как имена переменных.
Ответ 7
Регулярное выражение для слов даст вам наибольший контроль. Вы хотели бы тщательно рассмотреть, как обращаться со словами с тире или апострофами, например "Я".
Ответ 8
Лично я думаю, что это немного чище, чем ответы, предоставленные
def split_to_words(sentence):
return list(filter(lambda w: len(w) > 0, re.split('\W+', sentence))) #Use sentence.lower(), if needed
Ответ 9
list=mystr.split(" ",mystr.count(" "))
Ответ 10
Вдохновленный ответом @mtrw, но улучшенный, чтобы исключить пунктуацию только на границах слов:
import re
import string
def extract_words(s):
return [re.sub('^[{0}]+|[{0}]+$'.format(string.punctuation), '', w) for w in s.split()]
>>> str = 'This is a string, with words!'
>>> extract_words(str)
['This', 'is', 'a', 'string', 'with', 'words']
>>> str = '''I'm a custom-built sentence with "tricky" words like https://stackoverflow.com/.'''
>>> extract_words(str)
["I'm", 'a', 'custom-built', 'sentence', 'with', 'tricky', 'words', 'like', 'https://stackoverflow.com']
Ответ 11
Это из моей попытки вызова кода, который не может использовать регулярное выражение,
outputList = "".join((c if c.isalnum() or c=="'" else ' ') for c in inputStr ).split(' ')
Роль апострофа кажется интересной.
Ответ 12
Таким образом вы удаляете все специальные char вне алфавита:
def wordsToList(strn):
L = strn.split()
cleanL = []
abc = 'abcdefghijklmnopqrstuvwxyz'
ABC = abc.upper()
letters = abc + ABC
for e in L:
word = ''
for c in e:
if c in letters:
word += c
if word != '':
cleanL.append(word)
return cleanL
s = 'She loves you, yea yea yea! '
L = wordsToList(s)
print(L) # ['She', 'loves', 'you', 'yea', 'yea', 'yea']
Я не уверен, что это быстро или оптимально или даже правильный способ программирования.
Ответ 13
Вы можете попробовать:
tryTrans = string.maketrans(",!", " ")
str = "This is a string, with words!"
str = str.translate(tryTrans)
listOfWords = str.split()