从 doc 和 docx 中提取文本
- 2024-10-28 08:37:00
- admin 原创
- 46
问题描述:
我想知道如何读取 doc 或 docx 的内容。我使用的是 Linux VPS 和 PHP,但如果有使用其他语言的更简单的解决方案,请告诉我,只要它可以在 Linux 网络服务器下运行。
解决方案 1:
在这里我添加了从.doc、.docx word 文件中获取文本的解决方案
如何从 word 文件 .doc、docx php 中提取文本
对于 .doc
private function read_doc() {
$fileHandle = fopen($this->filename, "r");
$line = @fread($fileHandle, filesize($this->filename));
$lines = explode(chr(0x0D),$line);
$outtext = "";
foreach($lines as $thisline)
{
$pos = strpos($thisline, chr(0x00));
if (($pos !== FALSE)||(strlen($thisline)==0))
{
} else {
$outtext .= $thisline." ";
}
}
$outtext = preg_replace("/[^a-zA-Z0-9s,.-
@/_()]/","",$outtext);
return $outtext;
}
对于 .docx
private function read_docx(){
$striped_content = '';
$content = '';
$zip = zip_open($this->filename);
if (!$zip || is_numeric($zip)) return false;
while ($zip_entry = zip_read($zip)) {
if (zip_entry_open($zip, $zip_entry) == FALSE) continue;
if (zip_entry_name($zip_entry) != "word/document.xml") continue;
$content .= zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
zip_entry_close($zip_entry);
}// end while
zip_close($zip);
$content = str_replace('</w:r></w:p></w:tc><w:tc>', " ", $content);
$content = str_replace('</w:r></w:p>', "
", $content);
$striped_content = strip_tags($content);
return $striped_content;
}
解决方案 2:
这仅适用于 .DOCX 解决方案。对于 .DOC 或 .PDF,您需要使用其他解决方案,例如适用于 PDF 的pdf2text.php
function docx2text($filename) {
return readZippedXML($filename, "word/document.xml");
}
function readZippedXML($archiveFile, $dataFile) {
// Create new ZIP archive
$zip = new ZipArchive;
// Open received archive file
if (true === $zip->open($archiveFile)) {
// If done, search for the data file in the archive
if (($index = $zip->locateName($dataFile)) !== false) {
// If found, read it to the string
$data = $zip->getFromIndex($index);
// Close archive file
$zip->close();
// Load XML from a string
// Skip errors and warnings
$xml = new DOMDocument();
$xml->loadXML($data, LIBXML_NOENT | LIBXML_XINCLUDE | LIBXML_NOERROR | LIBXML_NOWARNING);
// Return data without XML formatting tags
return strip_tags($xml->saveXML());
}
$zip->close();
}
// In case of failure return empty string
return "";
}
echo docx2text("test.docx"); // Save this contents to file
解决方案 3:
解析 .docx、.odt、.doc 和 .rtf 文档
我编写了一个库,根据这里和其他地方的答案来解析 docx、odt 和 rtf 文档。
我对 .docx 和 .odt 解析所做的主要改进是,该库处理描述文档的 XML 并尝试使其符合 HTML 标签,即em和strong标签。这意味着如果您将该库用于 CMS,则文本格式不会丢失
您可以在此处获取
解决方案 4:
我的解决方案是.doc 使用Antiword , .docx 使用docx2txt
假设您控制一个 Linux 服务器,下载每个程序,解压然后安装。我在系统范围内安装了每个程序:
反词:make global_install
docx2txt:make install
然后使用这些工具将文本提取为 php 中的字符串:
//for .doc
$text = shell_exec('/usr/local/bin/antiword -w 0 ' .
escapeshellarg($docFilePath));
//for .docx
$text = shell_exec('/usr/local/bin/docx2txt.pl ' .
escapeshellarg($docxFilePath) . ' -');
docx2txt 需要 perl
no_freedom 的解决方案确实能从 docx 文件中提取文本,但它会破坏空格。我测试的大多数文件都存在应分开的单词之间没有空格的情况。当您想要对正在处理的文档进行全文搜索时,这不太好。
解决方案 5:
尝试ApachePOI。它对 Java 很有效。我想你在 Linux 上安装 Java 不会遇到任何困难。
解决方案 6:
我建议使用 apache Tika 提取文本,您可以提取多种类型的文件内容,如 .doc/.docx 和 pdf 等。
解决方案 7:
我使用docxtotxt来提取docx文件内容,我的代码如下:
if($extention == "docx")
{
$docxFilePath = "/var/www/vhosts/abc.com/httpdocs/writers/filename.docx";
$content = shell_exec('/var/www/vhosts/abc.com/httpdocs/docx2txt/docx2txt.pl
'.escapeshellarg($docxFilePath) . ' -');
}
解决方案 8:
我对 doc 到 txt 转换器功能做了一些改进
private function read_doc() {
$line_array = array();
$fileHandle = fopen( $this->filename, "r" );
$line = @fread( $fileHandle, filesize( $this->filename ) );
$lines = explode( chr( 0x0D ), $line );
$outtext = "";
foreach ( $lines as $thisline ) {
$pos = strpos( $thisline, chr( 0x00 ) );
if ( $pos !== false ) {
} else {
$line_array[] = preg_replace( "/[^a-zA-Z0-9s,.-
@/_()]/", "", $thisline );
}
}
return implode("
",$line_array);
}
现在它保存空行并且 txt 文件逐行查看。
解决方案 9:
您可以使用Apache Tika作为完整的解决方案,它提供 REST API。
另一个不错的库是RawText,因为它可以对图像进行 OCR,并从任何文档中提取文本。它不是免费的,并且通过 REST API 工作。
使用 RawText 提取文件的示例代码:
$result = $rawText->extract($your_file)
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件