Простой текстовый парсер - PullRequest
       3

Простой текстовый парсер

1 голос
/ 26 августа 2011

Я хочу создать очень простой парсер для преобразования:

"Я не хочу, чтобы это было готово к 22:15 сегодня, мистер Гонсалес.!"to:

(
  'I',
  ' ', 
  'wan',
  '\'', 
  't', 
  ' ',  
  'this', 
  ' ',  
  'to',
  ' ', 
  'be',
  ' ', 
  'ready',
  ' ', 
  'by',
  ' ', 
  '10', 
  ':', 
  '15',
  ' ', 
  'p',
  '.',
  'm',
  '.',
  ' ', 
  'today',
  ' ',
  'Mr'
  '.'
  ' ',
  'Gönzalés',
  '.'
  '!'
)

Итак, я хочу, чтобы последовательные буквы и цифры были сгруппированы в одну строку.Я использую Python 3 и не хочу устанавливать внешние библиотеки.Я также хотел бы, чтобы решение было максимально эффективным, так как я буду обрабатывать книгу.

Итак, какие подходы вы бы порекомендовали мне в отношении решения этой проблемы.Есть примеры?

Единственный способ, о котором я могу думать сейчас, - это пройти текст, символ за символом, в цикле for.Но я предполагаю, что есть лучший, более элегантный подход.

Спасибо,

Барри

Ответы [ 2 ]

0 голосов
/ 26 августа 2011

Я считаю, что это решение:

import regex

text = "123 2 can't, 4 Å, é, and 中ABC _ sh_t"
print(regex.findall('\d+|\P{alpha}|\p{alpha}+', text))

Можно ли это улучшить?

Спасибо!

0 голосов
/ 26 августа 2011

Вы ищете процедуру, называемую токенизацией.Это означает разделение необработанного текста на отдельные «токены», в нашем случае - просто слова.Для языков программирования это довольно просто, но, к сожалению, это не так для естественного языка.

Вам нужно сделать две вещи: разбить текст на предложения и разбить предложения на слова.Обычно мы делаем это с помощью регулярных выражений.Наивно можно разделять предложения по шаблону «.», То есть по периоду с последующим пробелом, а затем разбивать слова по предложениям по пробелам.Это не будет работать очень хорошо, потому что сокращения часто также заканчиваются периодами.Как выясняется, разбить токены и сегментацию предложений на самом деле довольно сложно.Вы можете поэкспериментировать с несколькими регулярными выражениями, но было бы лучше использовать готовый токенизатор.Я знаю, что вы не хотели устанавливать какие-либо внешние библиотеки, но я уверен, что это избавит вас от боли позже.В НЛТК есть хорошие токенизаторы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...