Nano Hash - криптовалюты, майнинг, программирование

Разделение нескольких специальных символов в python

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

Мой вклад:

list words ="'He came,"
words = list words. partition("'")

for i in words:
    list-1. extend(i.split())

print(list-1)

мой вывод выглядит так:

["'", 'He', 'came,']

но я хочу

["'", 'He', 'came', ',']

Может ли кто-нибудь помочь мне, как это сделать?

21.10.2014

  • Это ваш настоящий код? Поскольку list words ="'He came," не является допустимым синтаксисом Python, как и list-1.extend. 21.10.2014
  • возможный дубликат разделения строки на слова и знаки препинания 21.10.2014
  • На самом деле нет, эти два вопроса имеют один и тот же ответ, но не являются одним и тем же вопросом. Я отозвал свой закрытый голос. 21.10.2014
  • Пожалуйста, обновите свой вопрос, чтобы уточнить, что вы подразумеваете под специальными символами. Из вашего примера кажется, что вы имеете в виду знаки препинания. Во всяком случае, все специальные символы. 21.10.2014

Ответы:


1

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

Тогда давайте сосредоточимся на цели, а не на вашем подходе. Ваш подход возможен, вероятно, возможен, но может потребоваться несколько расщеплений, поэтому давайте просто проигнорируем его. Использование re.findall и длинного регулярного выражения filtered должно работать намного лучше.

lst = re.findall(r"\w+|[^\w\s]", some_sentence)

Будет иметь смысл. В разбивке это:

pat = re.compile(r"""
    \w+        # one or more word characters
    |          #   OR
    [^\w\s]    # exactly one character that's neither a word character nor whitespace
    """, re.X)

results = pat.findall('"Why, hello there, Martha!"')
# ['"', 'Why', ',', 'hello', 'there', ',', 'Martha', '!', '"']

Однако тогда вам придется пройти еще одну итерацию вашего списка, чтобы подсчитать специальные символы! Давайте тогда разделим их. К счастью, это легко — просто добавьте фигурные скобки.

new_pat = re.compile(r"""
    (          # begin capture group
        \w+        # one or more word characters
    )          # end capturing group
    |          #   OR
    (          # begin capture group
        [^\w\s]    # exactly one character that's neither a word character nor whitespace
    )          # end capturing group
    """, re.X)

results = pat.findall('"Why, hello there, Martha!"')
# [('', '"'), ('Why', ''), ('', ','), ('hello', ''), ('there', ''), ('', ','), ('Martha', ''), ('', '!'), ('', '"')]

grouped_results = {"words":[], "punctuations":[]}

for word,punctuation in results:
    if word:
        grouped_results['words'].append(word)
    if punctuation:
        grouped_results['punctuations'].append(punctuation)
# grouped_results = {'punctuations': ['"', ',', ',', '!', '"'],
#                    'words': ['Why', 'hello', 'there', 'Martha']}

Затем просто посчитайте свои ключи dict.

>>> for key in grouped_results:
        print("There are {} items in {}".format(
            len(grouped_results[key]),
            key))

There are 5 items in punctuations
There are 4 items in words
21.10.2014
  • Я знаю, что должен быть причудливый трюк с застежкой-молнией, который я мог бы сделать, чтобы results превратился в список filter(None списков, один с пунктуацией, другой без, но я не могу думать об этом в данный момент. 21.10.2014
  • Раз уж вы так любезно спросили: words, punctuation = (list(filter(bool, v)) for v in zip(*results)). 21.10.2014
  • @poke спасибо! Я собирался использовать zip(*results) для замены размеров списка, но хотел фильтровать за один шаг, поэтому решил использовать цикл. TBH, цикл for в любом случае более читабелен :) 21.10.2014
  • Вы не можете сначала отфильтровать перед транспонированием, так как вы не можете снова соединить отфильтрованные элементы в пары (например, этот результат приведет к списку пар, подобных этому: [('Why', '"'), ('hello', ','), ('there', ','), ('Martha', '!'), ('????', '"')] — но последний элемент не имеет слова) 21.10.2014
  • @poke Это правда. Я надеялся фильтровать ВО ВРЕМЯ транспонирования, но это не имеет большого смысла. Что-то вроде [filter(None,[word]), filter(None,[punctuation]) for word,punctuation in results], в результате чего мой итоговый список будет [['these','are','words'], ['this','is','punctuation']] 22.10.2014
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..


    © 2024 nano-hash.ru, Nano Hash - криптовалюты, майнинг, программирование