Синтаксический анализ документов Word с помощью Python — DadOverflow.com
Если вам когда-либо приходилось программно исследовать текст в документе Microsoft Word, сначала получить текст может быть непросто. Конечно, вы можете вручную сохранить документ в обычный текстовый файл, который намного проще обрабатывать, но если у вас есть несколько документов для изучения, это может быть болезненно.
Недавно у меня возникла такая потребность, и я нашел эту статью «На пути к науке о данных» весьма полезной. Но давайте рассмотрим задачу немного дальше: предположим, у вас есть документ с несколькими разделами, и вам нужно извлечь текст из определенных разделов.
Страница 1 содержит мое оглавление Страница 2 содержит множество разделовПредположим, мне нужно вытащить только текст из «подразделов». В моем примере у меня есть три подраздела: подраздел 1, подраздел 2 и подраздел 3. В моем документе Word я назвал эти заголовки текстом «Заголовок 2». Вот как я вытащил текст для каждого из этих разделов.
Шаг 1: Импорт ваших пакетов
Для моих нужд мне нужно только импортировать zip-файл и ElementTree, что приятно, так как мне не нужно было устанавливать сторонние пакеты:
импортировать zip-файл импортировать xml.etree.ElementTree как ET
Шаг 2. Анализ документа XML
doc = zipfile.ZipFile('./data/test.docx').read('word/document.xml') корень = ET.fromstring(doc)
Шаг 3. Изучите XML для поиска нужных разделов и текста
Здесь вы проведете большую часть времени, пытаясь выяснить, какие элементы содержат интересующее вас содержимое. XML документов Microsoft соответствует стандарту WordprocessingML, который может быть довольно сложным. Я провел много времени, вручную просматривая свой XML в поисках нужных мне элементов. Вы можете записать XML следующим образом:
ET.tostring(корень)
Шаг 4: Найдите все абзацы
Чтобы решить мою проблему, я сначала решил собрать воедино коллекцию всех абзацев в документе, чтобы потом можно было перебирать их и принимать решения.
. # Microsoft XML активно использует пространства имен XML; таким образом, нам нужно будет сослаться на это в нашем коде ns = {'w': 'http://schemas.openxmlformats.org/wordprocessingml/2006/main'} body = root.find('w:body', ns) # найти XML-тег body p_sections = body.findall('w:p', ns) # под тегом body найдите все разделы абзаца
Может быть полезно увидеть текст в каждом из этих разделов. Изучая стандарт Microsoft XML, я знаю, что текст документа обычно содержится в элементах «t». Итак, если я напишу XPath-запрос, чтобы найти все элементы «t» в данном разделе, я могу соединить текст всех этих элементов вместе, чтобы получить полный текст абзаца. Этот код делает это:
для p в p_sections: text_elems = p.findall('.//w:t', нс) print(''.join([t.text для t в text_elems])) Распечатать()
Шаг 5: Найдите все разделы «Заголовок 2»
Теперь давайте пройдемся по каждому разделу абзаца и посмотрим, сможем ли мы выяснить, какие разделы были оформлены с помощью «Заголовка 2». Если мы сможем найти эти разделов заголовка 2 , мы будем знать, что последующий текст — это текст, который нам нужен.
Изучая стандарт XML, я обнаружил, что если я ищу элементы pStyle, содержащие значение «Heading2», это будут те разделы, которые мне нужны. Чтобы сделать мой код немного чище, я написал функции для оценки каждой секции для Стиль заголовка 2 и извлечь полный текст раздела:
определение is_heading2_section(p): """Возвращает True, если данный раздел абзаца был оформлен как Заголовок2""" return_val = Ложь heading_style_elem = p.find(".//w:pStyle[@w:val='Heading2']", ns) если heading_style_elem не None: return_val = Истина вернуть return_val защита get_section_text(p): """Возвращает объединенный текст текстовых элементов под заданным тегом абзаца""" return_val = '' text_elems = p.findall('.//w:t', нс) если text_elems не None: return_val = ''.join([t.text для t в text_elems]) вернуть return_val section_labels = [get_section_text(s) if is_heading2_section(s) else '' для s в p_sections]
Теперь, если я распечатаю свой список section_labels, я увижу это:
Мой список section_labelsТеперь я могу использовать простое понимание списка, чтобы склеить заголовки разделов и связанный текст трех подразделов, которые мне нужны:
section_text = [{'title': t, 'text': get_section_text(p_sections[i+1])} для i, t в enumerate(section_labels), если len(t) > 0]
И этот список выглядит так:
Мой список section_textВы можете скачать мой код здесь.
РАЗБОР в Scrabble | Words With Friends оценка и определение PARSE
Подходит ли parse для Scrabble? слова с друзьями? Лексус? WordFud? Другие игры?
Определения PARSE в различных словарях:
глагол — анализировать синтаксически, назначая составляющую структуру (предложению)
Разбить (предложение) на составные части речи с объяснением формы, функции и синтаксических отношений каждой части.
Описывать (слово), указав его часть речи, форму и синтаксические отношения в предложении.
Пристально изучить или подвергнуть подробному анализу, особенно путем разбивки на компоненты: «Что мы упускаем, разбивая поведение шимпанзе на общепринятые категории, в основном признанные из нашего собственного поведения?» (Стивен Джей Гулд).
Для анализа или разделения (например, ввода) на более легко обрабатываемые компоненты.
прил — грамматически описывать и анализировать [v РАЗБОР, РАЗБОР, РАЗБОР] : РАЗБИРАЕМЫЙ
more
WORD SOLVER
(tip: SPACE or ? for wildcards)×
WORD FINDER
Find words
Find only
Show Scores
Dictionary
Game
- все слова, начинающиеся с PARSE
- все слова, содержащие PARSE
- все слова, заканчивающиеся на PARSE
- синонимы слова PARSE
- антонимы слова PARSE
- анаграммы слова PARSE
- поиск кроссворда PARSE
More about «PARSE»
В слове 5 букв РАЗБОР (
A 1 E 1 P 3 R 1 S 1 6 1 )Чтобы найти все анаграммы Scrabble PARSE, перейти: PARSE?
Переставьте буквы в РАЗБОР и посмотрите несколько выигрышных комбинаций
Результаты Scrabble, которые можно создать, добавив дополнительную букву в PARSE
РАСПЭ Р SAP P ER РЕПА Y S РЭПАС Т РЭПАС С РЭ М АПС RD C АПС РАСПЭ Д SE C ПАР. РАП H ES РАПС R
S PRA X ES ПРА Т ЕС ПРАЗЕ S ЮАР А ЧЭ СЕРАП Е P H РАСЭ СПАР Г Э T РАПС T АПЕРС СПРЭА Д СП I РЭА КОПЬЕ S СПАР С Э ЗАПЧАСТИ S СЕРАП Н ЗАПЧАСТИ R ЗАПЧАСТИ D СПА D ER СПА C ER S О АПЕР S H ERPA S H АПЕР ПРА I SE S C ИЗНАСИЛОВАНИЕ G АПЕРА ПА Д РЕС PA C ERS О ПЕРАС Л АПСЕР Дж АСПЕР J АПЕРС Г ИЗНАСИЛОВАНИЕ Г АСПЕР ES C АРП ПА5 букв из PARSE
АПЕРС АПРЕСС СОГЛАСНО ПАРЕС РАЗБОР ГРУШИ ПРЕЙС ПРЕСА ИЗНАСИЛОВАНИЯ ПОжинает ЗАПАСНОЙ КОПЬЕ
4 письма из PARSE
АПЕР ОБЕЗЬЯНЫ АПСЕ АРЕС ЖОПА УШИ ЭРА ПАРЕ ПАРС ПАСЕ ГРУША ГОРОХ ИЗНАСИЛОВАНИЕ РАПС РАСЭ РАШП ПОжинать ПРЕДСТАВЛЕНИЯ ИСПЫТАТЬ СЕРА СПАЭ СПАР
3 письма из PARSE
ОБЕЗЬЯНА ЯВЛЯЮТСЯ АРС АСП УХО ЭРА ERS PAR PAS ПЭА ПЕР ПЭС РЭП РАН РЭП ВИЭ САЕ САП МОРЕ SER СПА
2 буквы из PARSE
АЭ дополненная реальность КАК Скорая помощь ЕС Пенсильвания ЧП RE
КОПИРОВАТЬ
Anagrammer — это сайт с игровыми ресурсами, который пользуется огромной популярностью среди игроков в такие популярные игры, как Scrabble, Lexulous, WordFeud, Letterpress, Ruzzle, Hangman и так далее.