【问题标题】:How to count words from .doc file using php script?如何使用 php 脚本计算 .doc 文件中的单词?
【发布时间】:2016-10-14 07:34:54
【问题描述】:

我尝试过很多类似How to extract text from word file .doc,docx,.xlsx,.pptx php 的方法。 但这不是解决方案。

我的服务器基于 Linux,因此启用 extension=php_com_dotnet.dll 不是解决方案。

另一个解决方案是在服务器上安装 LIBRE office 并将 .doc 文件即时转换为 .txt ,然后计算该文件中的单词。这是一项非常繁琐且耗时的工作。

我只需要一个简单的 php 脚本,从 .doc 文件中删除特殊字符并计算字数。

【问题讨论】:

  • .doc 几乎无法被任何非 Microsoft Word 软件解析。如果可能的话,我建议使用其他文件格式。
  • 我正在开发一个 wordpress pluing 来计算文件中的单词数。这还包括 .doc 文件,因为您知道它们是广泛使用的扩展名。所以我不能忽略 .doc 文件

标签: php ms-word


【解决方案1】:

您可以尝试使用这个声称能够将.doc.docx 文件转换为文本格式的PHP 类。

http://www.phpclasses.org/package/7934-PHP-Convert-MS-Word-Docx-files-to-text.html

根据给出的例子,你可以这样使用它:

require("doc2txt.class.php");

$docObj = new Doc2Txt("test.docx");
//$docObj = new Doc2Txt("test.doc");

$txt = $docObj->convertToText();
echo $txt;

正如您所指出的,与许多其他库一样,该库的核心功能是这样的:

<?php

 function read_doc($filename)
 {
    $fileHandle = fopen($filename, "r");
    $line = @fread($fileHandle, filesize($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-9\s\,\.\-\n\r\t@\/_()]/", "", $outtext);
    return $outtext;
 }

 echo read_doc("sample.doc");

?>

我已经用一个 .doc 文件测试了这个函数,它似乎工作得很好。它需要对文档的最后部分进行一些修复(在输出的末尾仍然会生成一些随机文本),但是通过一些微调它可以正常工作。

编辑: 你是对的,这个函数只适用于.docx 文档(我测试的文档可能是使用相同的机制制作的)。保存带有.doc扩展名的文件,这个功能不起作用! 我现在能给你的唯一帮助是 .doc binary specifications linkhere 是一个更完整的文件),你可以在其中实际看到二进制结构是如何制作的并从中提取信息。我现在做不到,所以我希望其他人可以帮助你完成这个!

【讨论】:

  • 是的,我已经测试过了。在整个堆栈流中,我都看到了相同的功能代码。但这不是工作伙伴,我可以从 .docx 文件中计算单词,但 .doc 是这里的主要问题
  • 比我想象的要长很多,但也不是不可能!检查我上次的编辑!
  • 希望我也可以试试这个并制作一个功能。谢谢小伙伴的帮助。如果我成功制作该功能会让您知道
  • @clami219 您如何进行微调以消除 read_doc() 输出末尾的随机文本?
  • @tholu 我实际上没有。对不起! :(
【解决方案2】:

最后我不得不使用 Libreoffice。但是使用它非常有效。它解决了我的所有问题。

所以我的建议是在服务器上安装 libreoffice 的“HEADLESS”包并使用命令行转换

【讨论】:

  • 请问您在命令行中获取字数/页数的命令是什么?
【解决方案3】:

我已经构建了一个工具,该工具结合了网络上和 Stack Overflow 上的各种方法,为 docdocxpdftxt 文件提供字数、行数和页数。我希望它对人们有用。如果有人可以得到rtf 使用它,我很乐意提出拉取请求! https://github.com/joeblurton/doccounter

【讨论】:

    猜你喜欢
    • 2021-07-23
    • 1970-01-01
    • 1970-01-01
    • 2013-01-20
    • 1970-01-01
    • 1970-01-01
    • 2015-07-13
    • 2011-01-16
    • 1970-01-01
    相关资源
    最近更新 更多