Подтвердить что ты не робот

Как извлечь простой текст из файлов .doc и .docx?

Кто-нибудь знает что-нибудь, что они могут порекомендовать, чтобы извлечь только простой текст из .doc или .docx?

Я нашел это - интересно, были ли еще какие-нибудь предложения?

4b9b3361

Ответ 1

Если вам нужен чистый текст (мое требование), вам нужно всего

unzip -p some.docx word/document.xml | sed -e 's/<[^>]\{1,\}>//g; s/[^[:print:]]\{1,\}//g'

Что я нашел в командной строке fu

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

Ответ 2

LibreOffice

Одним из вариантов является libreoffice/openoffice в режиме без заголовка (сначала убедитесь, что все остальные экземпляры libreoffice закрыты):

libreoffice --headless --convert-to "txt:Text (encoded):UTF8" mydocument.doc

Для получения дополнительной информации см., Например, эту ссылку: http://ask.libreoffice.org/en/question/2641/convert-to-command-line-parameter/

Список фильтров libreoffice см. По адресу http://cgit.freedesktop.org/libreoffice/core/tree/filter/source/config/fragments/filters.

Поскольку синтаксис командной строки openoffice слишком сложен, есть удобная оболочка, которая может упростить процесс: unoconv.

Apache POI

Другой вариант - Apache POI - хорошо поддерживаемая библиотека Java, которая, в отличие от antiword, может читать, создавать и конвертировать файлы .doc, .docx, .xls, .xlsx, .ppt, .pptx.

Вот самый простой из возможных код Java для преобразования документа .doc или .docx в простой текст:

import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;

import org.apache.poi.POITextExtractor;
import org.apache.poi.extractor.ExtractorFactory;
import org.apache.poi.openxml4j.exceptions.OpenXML4JException;
import org.apache.xmlbeans.XmlException;

public class WordToTextConverter {
    public static void main(String[] args) {
        try {
            convertWordToText(args[0], args[1]);
        } catch (ArrayIndexOutOfBoundsException aiobe) {
            System.out.println("Usage: java WordToTextConverter <word_file> <text_file>");
        }
    }

    public static void convertWordToText(String src, String desc) {
        try {
            FileInputStream fs = new FileInputStream(src);
            final POITextExtractor extractor = ExtractorFactory.createExtractor(fs);
            FileWriter fw = new FileWriter(desc);
            fw.write(extractor.getText());
            fw.flush();
            fs.close();
            fw.close();

        } catch (IOException | OpenXML4JException | XmlException e) {
            e.printStackTrace();
        }
    }
}


# Maven dependencies (pom.xml):

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>my.wordconv</groupId>
<artifactId>my.wordconv.converter</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>3.17</version>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>3.17</version>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-scratchpad</artifactId>
        <version>3.17</version>
    </dependency>
</dependencies>
</project>

Ответ 3

docx2txt упакован для Debian.

Ответ 5

Попробуйте Apache Tika. Он поддерживает большинство форматов документов (каждый формат Office, форматы OpenOffice/LibreOffice, PDF и т.д.) С использованием Java-библиотек (среди прочих, Apache POI). Это очень простое использование:

java -jar tika-app-1.4.jar --text ./my-document.doc

Ответ 6

Я считаю, что wv лучше, чем catdoc или antiword. Он может иметь дело с .docx и конвертировать в текст или HTML. Вот функция, которую я добавил в свой .bashrc для временного просмотра файла в терминале. Измените это как требуется.

# open word in less (ie worl document.doc)
worl() {
    DOC=$(mktemp /tmp/output.XXXXXXXXXX)
    wvText $1 $DOC
    less $DOC
    rm $DOC
}

Ответ 8

Недавно я столкнулся с этой проблемой и обнаружил, что инструменты командной строки OpenOffice/LibreOffice ненадежны в производстве (тысячи обработанных документов, десятки одновременно).

В конце концов, я построил облегченную упаковку DocRipper, которая намного быстрее и захватывает весь текст из .doc,.docx и .pdf без форматирования. DocRipper использует Antiword, grep и pdftotext для захвата текста и возврата его.