Это - более или менее способ сделать это:
>>> import re
>>> re.findall(r"[\w']+|[.,!?;]", "Hello, I'm a string!")
['Hello', ',', "I'm", 'a', 'string', '!']
прием, для не размышления о том, где разделить строку, но что включать в маркеры.
Протесты:
Вот моя запись.
у меня есть свои сомнения относительно того, как хорошо это поддержит в смысле эффективности, или если она ловит все случаи (отметьте"!!!" группировался; это может или не может быть хорошей вещью).
>>> import re
>>> import string
>>> s = "Helo, my name is Joe! and i live!!! in a button; factory:"
>>> l = [item for item in map(string.strip, re.split("(\W+)", s)) if len(item) > 0]
>>> l
['Helo', ',', 'my', 'name', 'is', 'Joe', '!', 'and', 'i', 'live', '!!!', 'in', 'a', 'button', ';', 'factory', ':']
>>>
Одна очевидная оптимизация должна была бы скомпилировать regex перед рукой (использующий re.compile), если Вы собираетесь быть выполнением этого на линию за линией основание.
В синтаксисе регулярного выражения perl-стиля, \b
соответствия граница слова. Это должно пригодиться для того, чтобы сделать находящееся в regex разделение.
редактирование: мне сообщил транзитный участок, что "пустые соответствия" не работают в функции разделения модуля ре Python. Я оставлю это здесь как информацию для кого-либо еще озадачиваемого этой "функцией".
Вот незначительное обновление к Вашей реализации. Если Ваша попытка к выполнению чего-либо более подробного я предлагаю изучить NLTK что предложенный le dorfier.
Это могло бы только быть немного быстрее, так как ''.join () используется вместо + =, который является известен быть быстрее .
import string
d = "Hello, I'm a string!"
result = []
word = ''
for char in d:
if char not in string.whitespace:
if char not in string.ascii_letters + "'":
if word:
result.append(word)
result.append(char)
word = ''
else:
word = ''.join([word,char])
else:
if word:
result.append(word)
word = ''
print result
['Hello', ',', "I'm", 'a', 'string', '!']
Я думаю, что можно найти всю справку, которую можно вообразить в NLTK, тем более, что Вы используете Python. Существует хорошее всестороннее обсуждение этой проблемы в учебном руководстве.
Вы попытались использовать regex?
http://docs.python.org/library/re.html#re-syntax
<час>Между прочим. Почему Вам нужно"", во втором? Вы будете знать, что после того, как каждый текст записан т.е.
[0]
"",
[1]
"",
Поэтому, если Вы хотите добавить"", можно просто сделать это после каждого повторения при использовании массива..