Разделение строки в слова и пунктуацию

  1. Выберите свое изображение (ы) в Навигаторе проектов.
  2. Откройте инспектор файлов.
  3. Убедитесь, что вы выбрали цель.
57
задан Fionnuala 14 December 2008 в 23:56
поделиться

6 ответов

Это - более или менее способ сделать это:

>>> import re
>>> re.findall(r"[\w']+|[.,!?;]", "Hello, I'm a string!")
['Hello', ',', "I'm", 'a', 'string', '!']

прием, для не размышления о том, где разделить строку, но что включать в маркеры.

Протесты:

  • подчеркивание (_) считают внутренним словесным символом. Замените \w, если Вы не хотите это.
  • Это не будет работать с (единственными) кавычками в строке.
  • Помещенный любые дополнительные знаки пунктуации Вы хотите использовать в правильной половине регулярного выражения.
  • Что-либо не explicitely упомянутый в ре тихо отбрасывается.
80
ответ дан 7 November 2019 в 15:58
поделиться

Вот моя запись.

у меня есть свои сомнения относительно того, как хорошо это поддержит в смысле эффективности, или если она ловит все случаи (отметьте"!!!" группировался; это может или не может быть хорошей вещью).

>>> 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), если Вы собираетесь быть выполнением этого на линию за линией основание.

4
ответ дан 7 November 2019 в 15:58
поделиться

В синтаксисе регулярного выражения perl-стиля, \b соответствия граница слова. Это должно пригодиться для того, чтобы сделать находящееся в regex разделение.

редактирование: мне сообщил транзитный участок, что "пустые соответствия" не работают в функции разделения модуля ре Python. Я оставлю это здесь как информацию для кого-либо еще озадачиваемого этой "функцией".

5
ответ дан Svante 7 November 2019 в 15:58
поделиться

Вот незначительное обновление к Вашей реализации. Если Ваша попытка к выполнению чего-либо более подробного я предлагаю изучить 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', '!']
1
ответ дан monkut 7 November 2019 в 15:58
поделиться

Я думаю, что можно найти всю справку, которую можно вообразить в NLTK, тем более, что Вы используете Python. Существует хорошее всестороннее обсуждение этой проблемы в учебном руководстве.

0
ответ дан dkretz 7 November 2019 в 15:58
поделиться

Вы попытались использовать regex?

http://docs.python.org/library/re.html#re-syntax

<час>

Между прочим. Почему Вам нужно"", во втором? Вы будете знать, что после того, как каждый текст записан т.е.

[0]

"",

[1]

"",

Поэтому, если Вы хотите добавить"", можно просто сделать это после каждого повторения при использовании массива..

-1
ответ дан Filip Ekberg 7 November 2019 в 15:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: