मैं दस्तावेज़ संरचना को संरक्षित करते हुए वर्ड दस्तावेज़ों से टेक्स्ट सामग्री निकालना चाहता हूं। यह सवाल सबसे करीब आता है और प्रदान करता है प्रारंभिक बिंदु। यहां एक डमी शब्द दस्तावेज़ है। मैंने इसे अनज़िप कर दिया है और नीचे document.xml शामिल हैं:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<w:document xmlns:wpc="http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas" xmlns:mo="http://schemas.microsoft.com/office/mac/office/2008/main" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mv="urn:schemas-microsoft-com:mac:vml" 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" mc:Ignorable="w14 w15 wp14"><w:body><w:p w14:paraId="09AE8A7D" w14:textId="338F199D" w:rsidR="00D8348A" w:rsidRPr="00987637" w:rsidRDefault="00987637" w:rsidP="00987637"><w:pPr><w:pStyle w:val="Title"/><w:rPr><w:sz w:val="40"/><w:szCs w:val="40"/></w:rPr></w:pPr><w:r w:rsidRPr="00987637"><w:rPr><w:sz w:val="40"/><w:szCs w:val="40"/></w:rPr><w:t xml:space="preserve">The </w:t></w:r><w:r w:rsidR="00A6772E"><w:rPr><w:sz w:val="40"/><w:szCs w:val="40"/></w:rPr><w:t>Example Docx</w:t></w:r><w:bookmarkStart w:id="0" w:name="_GoBack"/><w:bookmarkEnd w:id="0"/></w:p><w:p w14:paraId="0803A50C" w14:textId="77777777" w:rsidR="00987637" w:rsidRDefault="00987637"/><w:p w14:paraId="0EDF635A" w14:textId="77777777" w:rsidR="00987637" w:rsidRDefault="00987637" w:rsidP="00987637"><w:pPr><w:pStyle w:val="Heading2"/></w:pPr><w:r><w:t>Introduction</w:t></w:r></w:p><w:p w14:paraId="2AF32AB2" w14:textId="77777777" w:rsidR="00987637" w:rsidRDefault="00987637"/><w:p w14:paraId="4DB9AE94" w14:textId="6C08452A" w:rsidR="00987637" w:rsidRPr="00987637" w:rsidRDefault="00C52D6C" w:rsidP="00987637"><w:r><w:t>This is the introduction para.</w:t></w:r><w:r w:rsidR="00A6772E" w:rsidRPr="00A6772E"><w:t xml:space="preserve"> </w:t></w:r><w:r w:rsidR="00A6772E"><w:t>Awesome.</w:t></w:r></w:p><w:p w14:paraId="676B3B48" w14:textId="77777777" w:rsidR="00987637" w:rsidRPr="00987637" w:rsidRDefault="00987637" w:rsidP="00987637"/><w:p w14:paraId="17CE18FE" w14:textId="77777777" w:rsidR="00987637" w:rsidRDefault="00987637" w:rsidP="00987637"><w:pPr><w:pStyle w:val="Heading2"/></w:pPr><w:r><w:t>Chapter 1</w:t></w:r></w:p><w:p w14:paraId="58A187F6" w14:textId="77777777" w:rsidR="00987637" w:rsidRDefault="00987637"/><w:p w14:paraId="2815D3B5" w14:textId="58856A78" w:rsidR="00C52D6C" w:rsidRPr="00987637" w:rsidRDefault="00C52D6C" w:rsidP="00C52D6C"><w:r><w:t xml:space="preserve">This is the </w:t></w:r><w:r><w:t xml:space="preserve">chapter 1 intro </w:t></w:r><w:r><w:t>para.</w:t></w:r><w:r><w:t xml:space="preserve"> </w:t></w:r><w:r w:rsidR="00A6772E"><w:t>Awesome.</w:t></w:r></w:p><w:p w14:paraId="7010E2CD" w14:textId="77777777" w:rsidR="00987637" w:rsidRDefault="00987637" w:rsidP="00987637"/><w:p w14:paraId="52D9B766" w14:textId="77777777" w:rsidR="00987637" w:rsidRDefault="00987637" w:rsidP="00987637"><w:pPr><w:pStyle w:val="Heading3"/></w:pPr><w:r><w:t>Chapter 1.1</w:t></w:r></w:p><w:p w14:paraId="055DB7AC" w14:textId="77777777" w:rsidR="00987637" w:rsidRDefault="00987637" w:rsidP="00987637"/><w:p w14:paraId="22A2C473" w14:textId="1D3FE489" w:rsidR="00A6772E" w:rsidRPr="00987637" w:rsidRDefault="00A6772E" w:rsidP="00A6772E"><w:r><w:t xml:space="preserve">This is </w:t></w:r><w:r><w:t>section 1.1</w:t></w:r><w:r><w:t xml:space="preserve"> </w:t></w:r><w:r><w:t>text</w:t></w:r><w:r><w:t>. Awesome.</w:t></w:r></w:p><w:p w14:paraId="1F60E111" w14:textId="77777777" w:rsidR="00987637" w:rsidRDefault="00987637" w:rsidP="00987637"/><w:p w14:paraId="62A6FEE6" w14:textId="77777777" w:rsidR="00987637" w:rsidRDefault="00987637" w:rsidP="00987637"><w:pPr><w:pStyle w:val="Heading3"/></w:pPr><w:r><w:t xml:space="preserve">Chapter </w:t></w:r><w:r><w:t>1.2</w:t></w:r></w:p><w:p w14:paraId="3B8DA076" w14:textId="77777777" w:rsidR="00987637" w:rsidRPr="00987637" w:rsidRDefault="00987637" w:rsidP="00987637"/><w:p w14:paraId="43519FB7" w14:textId="311F726C" w:rsidR="00987637" w:rsidRDefault="00A6772E" w:rsidP="00987637"><w:r><w:t>This is section 1.</w:t></w:r><w:r><w:t>2</w:t></w:r><w:r><w:t xml:space="preserve"> text. Awesome.</w:t></w:r></w:p><w:p w14:paraId="2D6908F2" w14:textId="77777777" w:rsidR="00987637" w:rsidRDefault="00987637" w:rsidP="00987637"/><w:p w14:paraId="3189011C" w14:textId="77777777" w:rsidR="00987637" w:rsidRDefault="00987637" w:rsidP="00987637"><w:pPr><w:pStyle w:val="Heading2"/></w:pPr><w:r><w:t>Chapter 2</w:t></w:r></w:p><w:p w14:paraId="6FFC56CD" w14:textId="77777777" w:rsidR="00987637" w:rsidRDefault="00987637" w:rsidP="00987637"/><w:p w14:paraId="3E9AE930" w14:textId="329881E3" w:rsidR="00987637" w:rsidRPr="00987637" w:rsidRDefault="00A6772E" w:rsidP="00987637"><w:r><w:t xml:space="preserve">This is </w:t></w:r><w:r><w:t>the c</w:t></w:r><w:r><w:t xml:space="preserve">hapter </w:t></w:r><w:r><w:t>2</w:t></w:r><w:r><w:t xml:space="preserve"> </w:t></w:r><w:r><w:t xml:space="preserve">text. </w:t></w:r><w:r><w:t>Awesome.</w:t></w:r></w:p><w:p w14:paraId="57F0B3DF" w14:textId="77777777" w:rsidR="00987637" w:rsidRDefault="00987637"/><w:p w14:paraId="48315F42" w14:textId="77777777" w:rsidR="00987637" w:rsidRDefault="00987637"/><w:sectPr w:rsidR="00987637" w:rsidSect="00751697"><w:pgSz w:w="11900" w:h="16840"/><w:pgMar w:top="1440" w:right="1440" w:bottom="1440" w:left="1440" w:header="720" w:footer="720" w:gutter="0"/><w:cols w:space="720"/><w:docGrid w:linePitch="360"/></w:sectPr></w:body></w:document>

यह एक्सएमएल में पढ़ता है:

library(xml2)
library(magrittr)
doc = read_xml('document.xml')

मैं इससे सामग्री निकालने के अगले चरणों के बारे में अस्पष्ट हूं। मैंने कोशिश की:

xml_find_all(doc, "/w:body/w:p/w:hyperlink/w:r/w:t") %>% xml_text()

लेकिन यह कुछ भी नहीं लौटाता है। सहायता के लिए आभारी। मेरा लक्ष्य टेक्स्ट सामग्री को किसी ऐसे प्रारूप में निर्यात करना है जो दस्तावेज़ संरचना को संरक्षित करता है - शायद एक सीएसवी जिसमें कॉलम Title से Heading 1 आदि से Normal तक पेड़ को प्रतिबिंबित करते हैं।

----------------------------------------\

संपादित करें:

उदाहरण दस्तावेज़ संरचना है जैसा कि मैं इसे देखता हूं:

Title
-- Heading 2
-- -- para
-- -- Chapter 1
-- -- -- para
-- -- -- Chapter 1.1
-- -- -- -- para
-- -- -- Chapter 1.2
-- -- -- -- para
-- -- Chapter 2
-- -- -- para

ईमानदार होने के लिए मैं आउटपुट पर लचीला हूं (जेसन ठीक है) लेकिन इसे इस लगभग दस्तावेज़ संरचना को प्रतिबिंबित करने की आवश्यकता है।

1
geotheory 21 मार्च 2017, 19:49

2 जवाब

सबसे बढ़िया उत्तर

आप कार्य की जटिलता को गंभीर रूप से कम करके आंक रहे हैं।

XPath चयन के लिए है। अपने OOXML दस्तावेज़ से नोड्स का एक सेट निकालने के लिए XPath अभिव्यक्ति लिखना एक साधारण मामला होगा। उदाहरण के लिए, यह XPath 2.0 व्यंजक,

//w:p[w:pPr/w:pStyle/@w:val='Heading2']/string()

आपके दस्तावेज़ के लिए वापस आ जाएगा:

Introduction
Chapter 1
Chapter 2

यदि आप चयन से अधिक करना चाहते हैं, यदि आप रूपांतरण करना चाहते हैं, तो आप XSLT तक कदम बढ़ाना चाहेंगे। आप वर्ड दस्तावेज़ में जो कुछ भी किया जा सकता है उसे संभालने के लिए ओओएक्सएमएल विनिर्देश के 5K+ पृष्ठों में भी जाना होगा। ध्यान दें कि इंडेंटेशन स्तर, चूंकि वे शैलियों से आ सकते हैं, सामान्य रूप से कवर करने के लिए विशेष रूप से मुश्किल हो सकते हैं।

हालांकि, चयन के लिए XPath आश्चर्यजनक रूप से शक्तिशाली है। मैं आपको एक और XPath 2.0 अभिव्यक्ति देता हूँ,

//w:p[normalize-space()]/normalize-space()

जो आपके दस्तावेज़ के लिए वापस आ जाएगा,

The Example Docx
Introduction
This is the introduction para. Awesome.
Chapter 1
This is the chapter 1 intro para. Awesome.
Chapter 1.1
This is section 1.1 text . Awesome.
Chapter 1.2
This is section 1. 2 text. Awesome.
Chapter 2
This is the c hapter 2 text. Awesome.

और यह लगभग बिना किसी विकास प्रयास के आप जो चाहते हैं, उसके तांत्रिक रूप से करीब लगता है। यदि आप अपने इनपुट स्थान को सीमित करते हैं, तो आप सामान्य मामले की तुलना में कम प्रयास के साथ पदानुक्रम को पुनर्प्राप्त करने में सक्षम हो सकते हैं, लेकिन सामान्य मामले को संभालना बेहद जटिल है।

2
kjhughes 21 मार्च 2017, 20:41

मैंने अंत में pandoc का उपयोग करके एक अलग तरीका अपनाया - pandoc -s example.docx -o example.html के साथ html में कनवर्ट करना। यह स्वरूपण और लिंक आदि को संरक्षित करता है और साथ काम करने के लिए बहुत साफ आउटपुट देता है।

1
geotheory 21 मार्च 2017, 23:13