python - извлечь текст из слова Microsoft - PullRequest
1 голос
/ 15 января 2020

Я пытаюсь извлечь текст в определенных c частях документа MS Word ( ссылка ) - пример ниже. По сути, мне нужно записать весь текст с тегами -- ASN1START и -- ASN1STOP в файл, исключая вышеупомянутые теги.

образец текста

-- ASN1START

CounterCheck ::=            SEQUENCE {
    rrc-TransactionIdentifier           RRC-TransactionIdentifier,
    criticalExtensions                  CHOICE {
        c1                                  CHOICE {
            counterCheck-r8                     CounterCheck-r8-IEs,
            spare3 NULL, spare2 NULL, spare1 NULL
        },
        criticalExtensionsFuture            SEQUENCE {}
    }
}

CounterCheck-r8-IEs ::= SEQUENCE {
    drb-CountMSB-InfoList               DRB-CountMSB-InfoList,
    nonCriticalExtension                CounterCheck-v8a0-IEs               OPTIONAL
}

CounterCheck-v8a0-IEs ::= SEQUENCE {
    lateNonCriticalExtension            OCTET STRING                        OPTIONAL,
    nonCriticalExtension                CounterCheck-v1530-IEs              OPTIONAL
}

CounterCheck-v1530-IEs ::= SEQUENCE {
    drb-CountMSB-InfoListExt-r15        DRB-CountMSB-InfoListExt-r15        OPTIONAL,   -- Need ON
    nonCriticalExtension                SEQUENCE {}                         OPTIONAL
}

DRB-CountMSB-InfoList ::=       SEQUENCE (SIZE (1..maxDRB)) OF DRB-CountMSB-Info

DRB-CountMSB-InfoListExt-r15 ::=    SEQUENCE (SIZE (1..maxDRBExt-r15)) OF DRB-CountMSB-Info

DRB-CountMSB-Info ::=   SEQUENCE {
    drb-Identity                    DRB-Identity,
    countMSB-Uplink                 INTEGER(0..33554431),
    countMSB-Downlink               INTEGER(0..33554431)
}

-- ASN1STOP

Я пытался использовать docx.

from docx import *
import re
import json

fileName = './data/36331-f80.docx'
document = Document(fileName)

startText = re.compile(r'-- ASN1START')

for para in document.paragraphs:
    # look for each paragraph
    text = para.text
    print(text)
    # if startText.match(para.text):
    #     print(text)

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

1 Ответ

1 голос
/ 15 января 2020

Вы можете сначала попытаться прочитать весь текст документа / абзаца в одну строку, а затем использовать re.findall, чтобы найти весь соответствующий текст между целевыми тегами:

text = ""
for para in document.paragraphs:
    text += para.text + "\n"

matches = re.findall(r'-- ASN1START\s*(.*?)\s*-- ASN1STOP', text, flags=re.DOTALL)

Обратите внимание, что мы используем DOT ALL режим с регулярным выражением, чтобы гарантировать, что .* может сопоставлять содержимое между тегами, которые встречаются через новые строки.

...