2017-02-14 9 views
1

--update-- может быть, кто-то может предположить, другая возможность так разделить .docx документ в его глав, импорт .docx в Rимпортировать сложный .docx файл как .xml и извлечь главы

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

Однако у меня есть комплексный документ .docx, содержащий индекс, отформатированный до .xml.

library(XML) 
xmlfile <- xmlParse("C:/Users/Documents/stihl.xml", options = HUGE) 

topxml <- xmlRoot(xmlfile) 

topxml <- xmlSApply(topxml, function(x) xmlSApply(x, xmlValue)) 
xml_df <- data.frame(t(topxml), row.names = NULL, node) 

И другие возможности для чтения XML-файла. У моего .docx документа есть индекс, и теперь я хочу извлечь несколько содержимого индекса. В качестве примера .docx

1. Introduction 
    This is an introduction importing XML by R. 
2. UserGuide 
    Userguides are often helpful. 
2.1 Style 
    The style should be always the same. 
2.2 Language 
    I hope my Language is readable, because I'm contacting you from Germany. 

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

result 
[1]This is an introduction importing XML by R. 
[2]Userguides are often helpful. 
[3]The style should be always the same. 
[4]I hope my Language is readable, because I'm contacting you from Germany. 

Возможно, есть и другие возможности сохранения структуры, но я упомянул XML-импорт, содержащий древовидную структуру, как самый простой способ.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<?mso-application progid="Word.Document"?> 
<pkg:package xmlns:pkg="http://schemas.microsoft.com/office/2006/xmlPackage"> 

    <pkg:part 
    pkg:name="/_rels/.rels" 
    pkg:contentType="application/vnd.openxmlformats-package.relationships+xml" 
    pkg:padding="512"> 
    <pkg:xmlData> 
     <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"> 
      <Relationship 
      Id="rId3" 
      Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" 
      Target="docProps/app.xml"/> 
      <Relationship 
      Id="rId2" 
      Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" 
      Target="docProps/core.xml"/> 
      <Relationship Id="rId1" 
      Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" 
      Target="word/document.xml"/> 
     </Relationships> 
    </pkg:xmlData> 
    </pkg:part> 

    <pkg:part 
    #serveral relationships 
    </pkg:part> 

    <pkg:part 
    pkg:name="/word/document.xml" 
    pkg:contentType="application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml"> 
    <pkg:xmlData> 

     <w:document mc:Ignorable="w14 w15 wp14" 




    xmlns:wpc:http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas 
    xmlns:mc:http://schemas.openxmlformats.org/markup-compatibility/2006 
    xmlns:o:urn:schemas-microsoft-com:office:office 
    xmlns:r:http://schemas.openxmlformats.org/officeDocument/2006/relationships 
    xmlns:m:http://schemas.openxmlformats.org/officeDocument/2006/math 
    xmlns:v:urn:schemas-microsoft-com:vml 
    xmlns:wp14:http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing 
    xmlns:wp:http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing 
    xmlns:w10:urn:schemas-microsoft-com:office:word 
    xmlns:w:http://schemas.openxmlformats.org/wordprocessingml/2006/main 
    xmlns:w14:http://schemas.microsoft.com/office/word/2010/wordml 
    xmlns:w15:http://schemas.microsoft.com/office/word/2012/wordml 
    xmlns:wpg:http://schemas.microsoft.com/office/word/2010/wordprocessingGroup 
    xmlns:wpi:http://schemas.microsoft.com/office/word/2010/wordprocessingInk 
    xmlns:wne:http://schemas.microsoft.com/office/word/2006/wordml 
    xmlns:wps:http://schemas.microsoft.com/office/word/2010/wordprocessingShape 

     <w:body> 

      <w:p> ... 
      </w:p> 

      <w:p w14:paraId="5BB64FEF" w14:textId="77777777" w:rsidR="005A3789" w:rsidRDefault="005A3789" w:rsidP="005A3789"> 
      <w:pPr> 
      <w:pStyle w:val="Inhaltsverzeichnisberschrift"/> 
      </w:pPr> 
      <w:r> 
      <w:lastRenderedPageBreak/> 
      <w:t>Inhaltsverzeichnis</w:t> 
      </w:r> 
      </w:p> 

'Inhaltsverzeichnis' - это название моего индекса. Путь пакет -> 3.part -> XMLDATA -> документ -> тело -> р

информация хранится здесь, например

<w:p w14:paraId="15ECF978" w14:textId="77777777" w:rsidR="009B5500" w:rsidRDefault="005A3789"> 
<w:pPr> 
<w:pStyle w:val="Verzeichnis1"/> 
<w:rPr> 
<w:rFonts w:eastAsiaTheme="minorEastAsia"/> 
<w:b w:val="0"/> 
<w:noProof/> 
<w:color w:val="auto"/> 
<w:lang w:eastAsia="de-DE"/> 
</w:rPr> 
</w:pPr> 
<w:r> 
<w:rPr> 
<w:b w:val="0"/> 
</w:rPr> 
<w:fldChar w:fldCharType="begin"/> 
</w:r> 
<w:r> 
<w:instrText xml:space="preserve"> TOC \o "1-4" \h \z \u 
</w:instrText> 
</w:r> 
<w:r> 
<w:rPr> 
<w:b w:val="0"/> 
</w:rPr> 
<w:fldChar w:fldCharType="separate"/> 
</w:r> 
<w:hyperlink w:anchor="_Toc474825312" w:history="1"> 
<w:r w:rsidR="009B5500" w:rsidRPr="009D0220"><w:rPr> 
<w:rStyle w:val="Hyperlink"/> 
<w:noProof/> 
</w:rPr> 
        **<w:t>1</w:t>** 
</w:r> 
<w:r w:rsidR="009B5500"><w:rPr><w:rFonts w:eastAsiaTheme="minorEastAsia"/> 
<w:b w:val="0"/> 
<w:noProof/> 
<w:color w:val="auto"/> 
<w:lang w:eastAsia="de-DE"/> 
</w:rPr><w:tab/> 
</w:r> 
<w:r w:rsidR="009B5500" w:rsidRPr="009D0220"> 
<w:rPr> 
<w:rStyle w:val="Hyperlink"/> 
<w:noProof/> 
</w:rPr> 
        **<w:t>Management Summary</w:t>** 
</w:r> 
<w:r w:rsidR="009B5500"> 
<w:rPr> 
<w:noProof/> 
<w:webHidden/> 
</w:rPr> 
<w:tab/> 
</w:r> 
<w:r w:rsidR="009B5500"> 
<w:rPr> 
<w:noProof/> 
<w:webHidden/> 
</w:rPr><w:fldChar w:fldCharType="begin"/> 
</w:r> 
<w:r w:rsidR="009B5500"> 
<w:rPr> 
<w:noProof/> 
<w:webHidden/> 
</w:rPr> 
<w:instrText xml:space="preserve"> PAGEREF _Toc474825312 \h </w:instrText> 
</w:r> 
<w:r w:rsidR="009B5500"> 
<w:rPr> 
<w:noProof/> 
<w:webHidden/> 
</w:rPr> 
</w:r> 
<w:r w:rsidR="009B5500"> 
<w:rPr> 
<w:noProof/> 
<w:webHidden/> 
</w:rPr> 
<w:fldChar w:fldCharType="separate"/> 
</w:r> 
<w:r w:rsidR="009B5500"> 
<w:rPr> 
<w:noProof/> 
<w:webHidden/> 
</w:rPr> 
       **<w:t>6</w:t>** 
</w:r> 
<w:r w:rsidR="009B5500"> 
<w:rPr> 
<w:noProof/> 
<w:webHidden/> 
</w:rPr> 
<w:fldChar w:fldCharType="end"/> 
</w:r> 
</w:hyperlink> 
</w:p> 

Это первая запись индекса, 1. Управление Резюме 6

+1

Это помогло бы иметь минимальный пример входного XML – GGamba

+0

Я надеюсь, что теперь лучше понять, ниже последний р пакета, есть Serveral р пакеты, содержащий контент между содержанием

+0

Я думаю, что он пропустил определение префикса 'w'. Вы можете найти в xml что-то вроде 'w =" http: // schemas ...... "'? – GGamba

ответ

0

Мы можем использовать:

library(xml2) 
library(magrittr) 

x <- read_xml("path/to/file.xml") 

titles <- xml_find_all(x, 
       "/pkg:package//pkg:part/pkg:xmlData/w:document/w:body/w:p/w:hyperlink/w:r/w:t") %>% 
     xml_text() %>% 
     matrix(ncol = 3, byrow = T) %>% 
     as.data.frame() 

colnames(titles)<- c('numChapter', 'title', 'numPage') 

Это retrives текст внутри все узлы-корреспондент переход к этому xpath.

Основываясь на вашем примере, в котором содержится xpath (что я допускаю) numChapter, его title и его numPage.


Как уже отмечалось, это приведет к ошибке, если XML не сформирован хорошо и/или отсутствует пространство имен.

Надеется, что это помогает

+0

Mhh не понравилось. 'part_xml <- xmlSApply (topxml [[3]] [[1]] [[1]], function (x) xmlSApply (x, xmlValue)) xml_df <- data.frame ((part_xml), row.names = NULL) 'имеет тот же результат.Моя проблема заключается в том, что вывод не имеет структуры, поэтому текст не связан или сгруппирован по заголовкам глав. –

+0

Где в xml есть результат, который вы хотите «структурировать»? Я предположил, что «Inhaltsverzeichnis» был первым узлом, который вас интересует, и есть несколько подобных позже. – GGamba

+0

отредактирован, проверьте, интересует ли это то, что вас интересует – GGamba