精华内容
下载资源
问答
  • com组件生成Word失败

    2018-11-16 15:50:56
    com组件使用了一段时间,对于在操作中所遇到的问题整理如下 1.报错:索引太长 word模板中的书签与id不对应2.com组件出错 ...找到与Word有关的组件 有几个修改几个 修改操作如下: 点击所选中的组件...

    com组件使用了一段时间,对于在操作中所遇到的问题整理如下

    1.报错:索引太长
    word模板中的书签与id不对应
    2.com组件出错
     第一步:打开任务管理器 关闭与office有关的进程
    第二步:请按下“win+R”打开运行界面,然后输入“dcomcnfg”,确定执行,便可打开组件服务。
    第三步:打开 如下图所示:
    找到与Word有关的组件 有几个修改几个
    修改操作如下:

    点击所选中的组件右键,属性 操作如下图


    标识选为交互式用户

    安全中选择自定义进行编辑



    对黄色部分的用户进行权限设置,如果没有如下所示的用户,则点击添加进行查找。
    用户 Everyone,NETWORK SERVICE,IIS_USER三个用户的权限允许项均勾上
    3.发布程序在服务器上时报错
    应用程序池的标识改为LocalSystem
    若出现服务器上用用户登录可操作成功,无用户登录时操作失败则将上图中第三个图片的交互式用户改为下列用户输入用户名和密码即可。
    注意检查一下自己的电脑上是否有不同的office版本 如果有只保留其一

     

    展开全文
  • 开始写上传文档并读取的的时候是调用com组件,中间遇到了很多坑,总结一下//传文档所在路径 返回文档内容 ...Microsoft.Office.Interop.Word.ApplicationClass wordApp = new Microsoft.Office.Interop.Word

    开始写上传文档并读取的的时候是调用com组件,中间遇到了很多坑,总结一下

    //传文档所在路径 返回文档内容
    public string Doc2Text(string docFileName)
    {
    //实例化COM
    Microsoft.Office.Interop.Word.ApplicationClass wordApp = new Microsoft.Office.Interop.Word.ApplicationClass();
    object fileobj = docFileName;
    object nullobj = System.Reflection.Missing.Value;
    //打开指定文件(不同版本的COM参数个数有差异,一般而言除第一个外都用nullobj就行了)
    Microsoft.Office.Interop.Word.Document doc = wordApp.Documents.Open(ref fileobj, ref nullobj, ref nullobj,
    ref nullobj, ref nullobj, ref nullobj,
    ref nullobj, ref nullobj, ref nullobj,
    ref nullobj, ref nullobj, ref nullobj, ref nullobj, ref nullobj, ref nullobj, ref nullobj
    );
    //取得doc文件中的文本
    string outText = doc.Content.Text;
    //关闭文件
    doc.Close(ref nullobj, ref nullobj, ref nullobj);
    //关闭COM
    wordApp.Quit(ref nullobj, ref nullobj, ref nullobj);
    //返回
    return outText;
    }
    当然 在读取的时候会有损坏的文件 和被加密的文件等问题 总之C#和office的兼容性不太好
    试明白了记得给分 别忘了要引用word的dll
    引用文件夹 右键添加引用 在组件里找Microsoft.Office.Interop.Word
    当初的代码大概是这样,本地测试,发现能用,测试没有问题,就发布到服务器上了,后来老师说不可以用啊,然后我在服务器上调试了一下,发现没有读写权限,就给了它权限,在服务器上本地测试也成功了。过了一段老师说还是不行,这个时候我开始怀疑那个老师的智商,然后我在本地测试了一下,发现是好的,在服务器上测试了一下,发现也没问题,后台我本机访问服务器,发现也没问题。这个时候就更怀疑老师智商了。由此偶然间,我用其他人的电脑访问的时候发现果然不行。后来经过本机多次的调试发现,连接本机连接着服务器的时候可以用,但是断开服务器再用的时候,发现就不行了。(有点神奇)再后来经过反复推敲,感觉应该是:我本机访问,服务器本地访问,本机连着服务器的时候用本机访问,都有最大的com组件读权限(都能连接了,肯定有最大的权限),但是当我断开服务器去访问的时候,就没有这个权限了,所以访问不了。然后我就给这个网站配com组件的权限,但是好麻烦, 经过多次实验,最终失败了,然后用了别人的一个框架,一下就成功了。
    ///
    /// 发布公告
    ///
    ///
    public ActionResult AnnouncePost()
    {
    if (Session[“Id”] != null)
    {
    AnnounceModel am = new AnnounceModel();
    return View(am);
    }
    else
    {
    return RedirectToAction(“Login”);
    }
    }

        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult AnnouncePost(HttpPostedFileBase file)
        {
            string filePath = Path.Combine(HttpContext.Server.MapPath("../Uploads"), Path.GetFileName(file.FileName));
            file.SaveAs(filePath);
    
            Aspose.Words.Document doc = new Aspose.Words.Document(filePath);
            var content = doc.GetText();
            content = content.Remove(0, 79);
            AnnounceModel uploadfile = new AnnounceModel();
            uploadfile.Message = content;
            uploadfile.Title = Request.Form["message"];
            db.AnnounceTb.Add(uploadfile);
            db.SaveChanges();
            return View();
    
        }
    
    展开全文
  • Word组件对象模型

    千次阅读 2014-10-10 11:25:15
    Word组件对象模型  Microsoft Office Word 2003 对象是按层次顺序排列的,层次结构顶端的两个主类是 Application 类和 Document 类。这两个类非常重要,因为在大部分时间里,您要么是在使用 Word 应用程序本身...

    1  Word组件对象模型   
    Microsoft Office Word 2003 对象是按层次顺序排列的,层次结构顶端的两个主类是 Application 类和 Document 类。这两个类非常重要,因为在大部分时间里,您要么是在使用 Word 应用程序本身,要么是以某种方式处理 Word 文档。Word 对象模型严格遵循用户界面。Application 对象提供整个应用程序的包装,每个 Document 对象表示单个 Word 文档。这些对象各自都有很多方法和属性,您可以使用这些方法和属性操作对象或与对象交互。
    Application 对象。Application 对象表示 Word 应用程序,是其他所有对象的父级。它的所有成员通常作为一个整体应用于 Word。可以使用该对象的属性和方法来控制 Word 环境。
    Document 对象。Document 对象是 Word 编程的中枢。当您打开文档或创建新文档时,就创建了新的 Document 对象,该对象被添加到 Word 的 Documents 集合中。焦点所在的文档叫做活动文档,由 Application 对象的 ActiveDocument 属性表示。
    Selection 对象。Selection 对象表示当前选择的区域,Selection 对象只存在一个。在 Word 用户界面中执行某项操作(例如,对文本进行加粗)时,应首先选择或突出显示文本,然后应用格式设置。Selection 对象始终存在于文档中。如果未选中任何对象,它表示插入点。此外,该对象还可以表示多个不连续的文本块。
    Range 对象。Range 对象表示文档中的一个连续的区域,由一个起始字符位置和一个结束字符位置定义。Range 对象的数量并不局限于一个。您可以在同一文档中定义多个 Range 对象。
    Bookmark 对象。Bookmark 对象与 Range 对象类似,它也表示文档中的一个连续区域,并具有一个起始位置和一个结束位置。书签用于在文档中标记一个位置,或者用作文档中的文本容器。Bookmark 对象可以小到只有一个插入点,也可以大到整篇文档。您还可以在文档中定义多个书签。
    对于Microsoft Office Word 2003,通常可以在..//Microsoft Office//OFFICE11// MSWORD.OLB获得相关接口类。常用的有_Application, Documents, _Document, Selection, Range等。此外,用于设置字体的_Font,段落格式的_ParagraphFormat,表格对象Tables及Table,目录对象TablesOfContents及TableOfContents等等也是常用的。

    2  Word启动与退出     
    使用Application 对象,关联接口、释放接口。具体代码如下:
    _Application theExcelApp;
    theExcelApp.CreateDispatch("word.application", NULL); //关联接口
    退出
    theExcelApp.Quit();  退出
    theExcelApp.ReleaseDispatch();  //释放接口

    3   Word表格操作    
    使用单文档对象_Document,表格集合对象Tables,表格对象Table,行对象Rows,单元格对象Cell,列集合对象Columns,列对象Column,区域对象Range等可对表格进行操作。
    插入表格。使用_Document:: GetTables返回一个Tables对象,使用Tables::Add在指定区域插入一个表格。
    获取列对象。使用Table:: GetColumns返回一个Columns对象,使用Columns:: Item返回一个Column对象。从而可以列为对象进行操作。
    单元格插入文字。使用Table:: Cell返回Cell对象,使用Cell:: GetRange返回区域对象,或者使用Cell::Select使得表格获得输入焦点,从而进行编辑。

    4  文字转换为表格    
    当需要把一个记事本(*.txt)文件转换为表格插入到Word文档中。最快捷的作法是将txt内容粘贴到word文档中,然后将内容转化为表格。步骤如下:
    首先确定一个插入txt内容的Range对象。
    使用Range::InsertFile函数。InsertFile函数声明为:
       void Range::InsertFile(LPCTSTR FileName, VARIANT* Range, VARIANT* ConfirmConversions, VARIANT* Link, VARIANT* Attachment)
    参数说明如下:
    FileName 插入文本路径。
    Range 插入文本内容的Range对象,设为NULL
    ConfirmConversions 确认转换,设为FALSE
    Link 链接到文件,设为FALSE
    Attachment 链接行为,设为FALSE
    使用Range:: ConvertToTable转换文字为表格,返回一个Table对象。ConvertToTable函数声明为:
    LPDISPATCH Range::ConvertToTable(VARIANT* Separator, VARIANT* NumRows, VARIANT* NumColumns, VARIANT* InitialColumnWidth, VARIANT* Format, VARIANT* ApplyBorders, VARIANT* ApplyShading, VARIANT* ApplyFont, VARIANT* ApplyColor, VARIANT* ApplyHeadingRows, VARIANT* ApplyLastRow, VARIANT* ApplyFirstColumn, VARIANT* ApplyLastColumn, VARIANT* AutoFit, VARIANT*, VARIANT* DefaultTableBehavior)
    参数说明如下:
    Separator 分隔符。通常设为1,即设置制表符为分隔符(如果采用其他分隔符,请适当修改)
    NumRows 表格行数目
    NumColumns 列数目
    InitialColumnWidth,Format,ApplyBorders,ApplyShading,ApplyFont,ApplyColor,ApplyBorders,ApplyFirstColumn,ApplyLastColumn, DefaultTableBehavior,均可设为VarOpt,由系统默认
    AutoFit 自动调整。设为0
    也可利用Selection对象代替Range对象进行文本转换表格,调用函数与Range对象的函数名称一致,参数略有出入。

    5 设置页码       
    通常我们需要在任意指定页开始插入新页码。网上很多文章都是只能在第二页开始设置。以下介绍我通过观察VBA宏代码得到的一种插入页码的方法(实现方法当然可能不止一种,我曾在网上看到曾有一篇文章提及这个问题,但是他的代码不能正常运行,估计是作者发布文章的时候有些不小心有遗漏)。要点在于插入分节符和取消,并且要注意返回当前节。步骤如下:
    0 在前一页使用Selection::InsertBreak插入分节符,参数值为2(参数值7为分页符)。
    1 使用_Document::GetActiveWindow返回窗口Window对象。
    2 使用Window:: GetActivePane返回当前活动Pane窗格对象
    3 使用Pane::GetView返回View视图对象,View::SetType(long(3))。
    4 使用SetSeekView(long(10))获得页眉页脚视图。
    5 使用Selection::GetHeaderFooter()获得页眉页脚对象HeaderFooter。
    6 使用HeaderFooter::SetLinkToPrevious(FALSE)取消“与上一节相同”。
    7此时输入较点Selction停留在上一节的页脚处。使用View::SetSeekView(long(0))将返回到当前节的文字视图中。
    8 使用View::SetSeekView(long(10))再次获得本节的页眉页脚视图。
    9 使用Selection::GetHeaderFooter()获得页眉页脚对象HeaderFooter。
    10 使用HeaderFooter::GetRange获得Range对象rangeheadfoot。
    11 使用Range:: GetFields获得Fields对象。
    12使用Fields:: Add获得Field对象,具体参数赋值为Add(rangeheadfoot,COleVariant(short(33)),varOpt,varOpt)。
    13 使用Fields::GetPageNumbers()获得PageNumbers页码对象。
    14使用PageNumbers对象的方法设置属性。特别要设置SetStartingNumber(long(1))。
    PageNumbers对象的其他设置可参考如下:
    SetNumberStyle(long(0));
     SetHeadingLevelForChapter(long(0));
     SetIncludeChapterNumber(FALSE);
     SetChapterPageSeparator(long(0));
     SetRestartNumberingAtSection(true);
    15 通过Range对象rangeheadfoot设置页码居中及文字大小。
    16 结束页码设置。使用View::SetSeekView(long(0))返回到文字视图。

    6 插入Excel图表    
    在Excel生成图表后,Word可将其嵌入文档中并改变其格式。用户可以通过双击图表对象激活,然后进行类似于Excel环境下的操作。具体操作如下:
    使用Selection:: GetInlineShapes。获得内嵌区域集合对象InlineShapes。
    使用InlineShapes::AddOLEObject插入表格,并获得内嵌区域对象InlineShape。AddOLEObject函数声明为:
    LPDISPATCH AddOLEObject(VARIANT* ClassType, VARIANT* FileName, VARIANT* LinkToFile, VARIANT* DisplayAsIcon, VARIANT* IconFileName, VARIANT* IconIndex, VARIANT* IconLabel, VARIANT* Range)
    参数说明如下:
    ClassType 插入类型,若为Excel对象,设为COleVariant("Excel.Sheet.8")。
    FileName 文件路径。
    LinkToFile 链接到文件。设为FALSE。
    DisplayAsIcon 显示为图标,设为FALSE。
    IconFileName 文件名图标,设为VarOpt。
    IconIndex 索引图标,设为VarOpt。
    IconLabel 标签图标,设为VarOpt。
    Range 区域,设为VarOpt。
    使用InlineShape的方法SetHeight、SetWidth调整大小。这些方法的参数值都是打印格式下的英磅数值。

    7 生成目录     
    单文档对象_Document,目录集合对象TablesOfContents,目录对象TableOfContents及Range对象。操作流程如下:
    使用_Document:: GetTablesOfContents返回TablesOfContents对象。
    TablesOfContents::Add返回TableOfContents对象。
    LPDISPATCH TablesOfContents::Add(LPDISPATCH Range, VARIANT* UseHeadingStyles, VARIANT* UpperHeadingLevel, VARIANT* LowerHeadingLevel, VARIANT* UseFields, VARIANT* TableID, VARIANT* RightAlignPageNumbers, VARIANT* IncludePageNumbers, VARIANT* AddedStyles, VARIANT* UseHyperlinks, VARIANT* HidePageNumbersInWeb, VARIANT* UseOutlineLevels)
    参数说明如下:
    Range 插入目录的Range对象。通常目录是文档生成结束时进行插入的,因此必须事先指定插入目录的区域Range对象。
    UseHeadingStyles 使用制表符前导符,设为TRUE
    UpperHeadingLevel 顶级目录,通常设为1
    LowerHeadingLevel 底级目录,根据需要赋值
    UseFields 使用区域,设为FALSE
    TableID 目录索引,以1起始
    RightAlignPageNumbers 页码右对齐,设为TRUE
    IncludePageNumbers 包含页码,
    AddedStyles 增加类型,设为NULL
    UseHyperlinks 使用超链接,设为TRUE
    HidePageNumbersInWeb Web页中隐藏页码,设为TRUE
    UseOutlineLevels 使用大纲级别,设为TRUE
    使用TableOfContents:: GetRange获取区域对象,进行其他例如文字大小控制等操作。
    TableOfContents:: UpdatePageNumbers更新页码

     

    1  Word组件对象模型   
    Microsoft Office Word 2003 对象是按层次顺序排列的,层次结构顶端的两个主类是 Application 类和 Document 类。这两个类非常重要,因为在大部分时间里,您要么是在使用 Word 应用程序本身,要么是以某种方式处理 Word 文档。Word 对象模型严格遵循用户界面。Application 对象提供整个应用程序的包装,每个 Document 对象表示单个 Word 文档。这些对象各自都有很多方法和属性,您可以使用这些方法和属性操作对象或与对象交互。
    Application 对象。Application 对象表示 Word 应用程序,是其他所有对象的父级。它的所有成员通常作为一个整体应用于 Word。可以使用该对象的属性和方法来控制 Word 环境。
    Document 对象。Document 对象是 Word 编程的中枢。当您打开文档或创建新文档时,就创建了新的 Document 对象,该对象被添加到 Word 的 Documents 集合中。焦点所在的文档叫做活动文档,由 Application 对象的 ActiveDocument 属性表示。
    Selection 对象。Selection 对象表示当前选择的区域,Selection 对象只存在一个。在 Word 用户界面中执行某项操作(例如,对文本进行加粗)时,应首先选择或突出显示文本,然后应用格式设置。Selection 对象始终存在于文档中。如果未选中任何对象,它表示插入点。此外,该对象还可以表示多个不连续的文本块。
    Range 对象。Range 对象表示文档中的一个连续的区域,由一个起始字符位置和一个结束字符位置定义。Range 对象的数量并不局限于一个。您可以在同一文档中定义多个 Range 对象。
    Bookmark 对象。Bookmark 对象与 Range 对象类似,它也表示文档中的一个连续区域,并具有一个起始位置和一个结束位置。书签用于在文档中标记一个位置,或者用作文档中的文本容器。Bookmark 对象可以小到只有一个插入点,也可以大到整篇文档。您还可以在文档中定义多个书签。
    对于Microsoft Office Word 2003,通常可以在..//Microsoft Office//OFFICE11// MSWORD.OLB获得相关接口类。常用的有_Application, Documents, _Document, Selection, Range等。此外,用于设置字体的_Font,段落格式的_ParagraphFormat,表格对象Tables及Table,目录对象TablesOfContents及TableOfContents等等也是常用的。

    2  Word启动与退出     
    使用Application 对象,关联接口、释放接口。具体代码如下:
    _Application theExcelApp;
    theExcelApp.CreateDispatch("word.application", NULL); //关联接口
    退出
    theExcelApp.Quit();  退出
    theExcelApp.ReleaseDispatch();  //释放接口

    3   Word表格操作    
    使用单文档对象_Document,表格集合对象Tables,表格对象Table,行对象Rows,单元格对象Cell,列集合对象Columns,列对象Column,区域对象Range等可对表格进行操作。
    插入表格。使用_Document:: GetTables返回一个Tables对象,使用Tables::Add在指定区域插入一个表格。
    获取列对象。使用Table:: GetColumns返回一个Columns对象,使用Columns:: Item返回一个Column对象。从而可以列为对象进行操作。
    单元格插入文字。使用Table:: Cell返回Cell对象,使用Cell:: GetRange返回区域对象,或者使用Cell::Select使得表格获得输入焦点,从而进行编辑。

    4  文字转换为表格    
    当需要把一个记事本(*.txt)文件转换为表格插入到Word文档中。最快捷的作法是将txt内容粘贴到word文档中,然后将内容转化为表格。步骤如下:
    首先确定一个插入txt内容的Range对象。
    使用Range::InsertFile函数。InsertFile函数声明为:
       void Range::InsertFile(LPCTSTR FileName, VARIANT* Range, VARIANT* ConfirmConversions, VARIANT* Link, VARIANT* Attachment)
    参数说明如下:
    FileName 插入文本路径。
    Range 插入文本内容的Range对象,设为NULL
    ConfirmConversions 确认转换,设为FALSE
    Link 链接到文件,设为FALSE
    Attachment 链接行为,设为FALSE
    使用Range:: ConvertToTable转换文字为表格,返回一个Table对象。ConvertToTable函数声明为:
    LPDISPATCH Range::ConvertToTable(VARIANT* Separator, VARIANT* NumRows, VARIANT* NumColumns, VARIANT* InitialColumnWidth, VARIANT* Format, VARIANT* ApplyBorders, VARIANT* ApplyShading, VARIANT* ApplyFont, VARIANT* ApplyColor, VARIANT* ApplyHeadingRows, VARIANT* ApplyLastRow, VARIANT* ApplyFirstColumn, VARIANT* ApplyLastColumn, VARIANT* AutoFit, VARIANT*, VARIANT* DefaultTableBehavior)
    参数说明如下:
    Separator 分隔符。通常设为1,即设置制表符为分隔符(如果采用其他分隔符,请适当修改)
    NumRows 表格行数目
    NumColumns 列数目
    InitialColumnWidth,Format,ApplyBorders,ApplyShading,ApplyFont,ApplyColor,ApplyBorders,ApplyFirstColumn,ApplyLastColumn, DefaultTableBehavior,均可设为VarOpt,由系统默认
    AutoFit 自动调整。设为0
    也可利用Selection对象代替Range对象进行文本转换表格,调用函数与Range对象的函数名称一致,参数略有出入。

    5 设置页码       
    通常我们需要在任意指定页开始插入新页码。网上很多文章都是只能在第二页开始设置。以下介绍我通过观察VBA宏代码得到的一种插入页码的方法(实现方法当然可能不止一种,我曾在网上看到曾有一篇文章提及这个问题,但是他的代码不能正常运行,估计是作者发布文章的时候有些不小心有遗漏)。要点在于插入分节符和取消,并且要注意返回当前节。步骤如下:
    0 在前一页使用Selection::InsertBreak插入分节符,参数值为2(参数值7为分页符)。
    1 使用_Document::GetActiveWindow返回窗口Window对象。
    2 使用Window:: GetActivePane返回当前活动Pane窗格对象
    3 使用Pane::GetView返回View视图对象,View::SetType(long(3))。
    4 使用SetSeekView(long(10))获得页眉页脚视图。
    5 使用Selection::GetHeaderFooter()获得页眉页脚对象HeaderFooter。
    6 使用HeaderFooter::SetLinkToPrevious(FALSE)取消“与上一节相同”。
    7此时输入较点Selction停留在上一节的页脚处。使用View::SetSeekView(long(0))将返回到当前节的文字视图中。
    8 使用View::SetSeekView(long(10))再次获得本节的页眉页脚视图。
    9 使用Selection::GetHeaderFooter()获得页眉页脚对象HeaderFooter。
    10 使用HeaderFooter::GetRange获得Range对象rangeheadfoot。
    11 使用Range:: GetFields获得Fields对象。
    12使用Fields:: Add获得Field对象,具体参数赋值为Add(rangeheadfoot,COleVariant(short(33)),varOpt,varOpt)。
    13 使用Fields::GetPageNumbers()获得PageNumbers页码对象。
    14使用PageNumbers对象的方法设置属性。特别要设置SetStartingNumber(long(1))。
    PageNumbers对象的其他设置可参考如下:
    SetNumberStyle(long(0));
     SetHeadingLevelForChapter(long(0));
     SetIncludeChapterNumber(FALSE);
     SetChapterPageSeparator(long(0));
     SetRestartNumberingAtSection(true);
    15 通过Range对象rangeheadfoot设置页码居中及文字大小。
    16 结束页码设置。使用View::SetSeekView(long(0))返回到文字视图。

    6 插入Excel图表    
    在Excel生成图表后,Word可将其嵌入文档中并改变其格式。用户可以通过双击图表对象激活,然后进行类似于Excel环境下的操作。具体操作如下:
    使用Selection:: GetInlineShapes。获得内嵌区域集合对象InlineShapes。
    使用InlineShapes::AddOLEObject插入表格,并获得内嵌区域对象InlineShape。AddOLEObject函数声明为:
    LPDISPATCH AddOLEObject(VARIANT* ClassType, VARIANT* FileName, VARIANT* LinkToFile, VARIANT* DisplayAsIcon, VARIANT* IconFileName, VARIANT* IconIndex, VARIANT* IconLabel, VARIANT* Range)
    参数说明如下:
    ClassType 插入类型,若为Excel对象,设为COleVariant("Excel.Sheet.8")。
    FileName 文件路径。
    LinkToFile 链接到文件。设为FALSE。
    DisplayAsIcon 显示为图标,设为FALSE。
    IconFileName 文件名图标,设为VarOpt。
    IconIndex 索引图标,设为VarOpt。
    IconLabel 标签图标,设为VarOpt。
    Range 区域,设为VarOpt。
    使用InlineShape的方法SetHeight、SetWidth调整大小。这些方法的参数值都是打印格式下的英磅数值。

    7 生成目录     
    单文档对象_Document,目录集合对象TablesOfContents,目录对象TableOfContents及Range对象。操作流程如下:
    使用_Document:: GetTablesOfContents返回TablesOfContents对象。
    TablesOfContents::Add返回TableOfContents对象。
    LPDISPATCH TablesOfContents::Add(LPDISPATCH Range, VARIANT* UseHeadingStyles, VARIANT* UpperHeadingLevel, VARIANT* LowerHeadingLevel, VARIANT* UseFields, VARIANT* TableID, VARIANT* RightAlignPageNumbers, VARIANT* IncludePageNumbers, VARIANT* AddedStyles, VARIANT* UseHyperlinks, VARIANT* HidePageNumbersInWeb, VARIANT* UseOutlineLevels)
    参数说明如下:
    Range 插入目录的Range对象。通常目录是文档生成结束时进行插入的,因此必须事先指定插入目录的区域Range对象。
    UseHeadingStyles 使用制表符前导符,设为TRUE
    UpperHeadingLevel 顶级目录,通常设为1
    LowerHeadingLevel 底级目录,根据需要赋值
    UseFields 使用区域,设为FALSE
    TableID 目录索引,以1起始
    RightAlignPageNumbers 页码右对齐,设为TRUE
    IncludePageNumbers 包含页码,
    AddedStyles 增加类型,设为NULL
    UseHyperlinks 使用超链接,设为TRUE
    HidePageNumbersInWeb Web页中隐藏页码,设为TRUE
    UseOutlineLevels 使用大纲级别,设为TRUE
    使用TableOfContents:: GetRange获取区域对象,进行其他例如文字大小控制等操作。
    TableOfContents:: UpdatePageNumbers更新页码



    http://blog.csdn.net/luckisok/article/details/3213177

    展开全文
  • Java中文分词组件 - word分词

    万次阅读 2019-02-10 16:17:50
    word分词是一个Java实现的分布式的中文分词组件,提供了多种基于词典的分词算法,并利用ngram模型来消除歧义。能准确识别英文、数字,以及日期、时间等数量词,能识别人名、地名、组织机构名等未登录词。能通过...

    目录

    API在线文档:

    编译好的jar包下载(包含依赖):

    Maven依赖:

    分词使用方法:

    分词算法效果评估:

    相关文章:


    word分词是一个Java实现的分布式的中文分词组件,提供了多种基于词典的分词算法,并利用ngram模型来消除歧义。能准确识别英文、数字,以及日期、时间等数量词,能识别人名、地名、组织机构名等未登录词。能通过自定义配置文件来改变组件行为,能自定义用户词库、自动检测词库变化、支持大规模分布式环境,能灵活指定多种分词算法,能使用refine功能灵活控制分词结果,还能使用词性标注、同义标注、反义标注、拼音标注等功能。同时还无缝和Lucene、Solr、ElasticSearch、Luke集成。

    注意:word1.3需要JDK1.8

    API在线文档:

    word 1.0 API

    word 1.1 API

    word 1.2 API

    编译好的jar包下载(包含依赖):

    链接: https://pan.baidu.com/s/1mnGQqx_5Yqv_KxS9HJCTcA 
    提取码: essu 

    Maven依赖:

    在pom.xml中指定dependency,可用版本有1.0、1.1、1.2、1.3:

    <dependencies>
        <dependency>
            <groupId>org.apdplat</groupId>
            <artifactId>word</artifactId>
            <version>1.3</version>
        </dependency>
    </dependencies>

    分词使用方法:

    1、快速体验

    运行项目根目录下的脚本demo-word.bat可以快速体验分词效果
    用法: command [text] [input] [output]
    命令command的可选值为:demo、text、file
    demo
    text 杨尚川是APDPlat应用级产品开发平台的作者
    file d:/text.txt d:/word.txt
    exit

    2、对文本进行分词

    移除停用词:List<Word> words = WordSegmenter.seg("杨尚川是APDPlat应用级产品开发平台的作者");
    保留停用词:List<Word> words = WordSegmenter.segWithStopWords("杨尚川是APDPlat应用级产品开发平台的作者");
                System.out.println(words);
    
    输出:
    移除停用词:[杨尚川, apdplat, 应用级, 产品, 开发平台, 作者]
    保留停用词:[杨尚川, 是, apdplat, 应用级, 产品, 开发平台, 的, 作者]

    3、对文件进行分词

    String input = "d:/text.txt";
    String output = "d:/word.txt";
    移除停用词:WordSegmenter.seg(new File(input), new File(output));
    保留停用词:WordSegmenter.segWithStopWords(new File(input), new File(output));

    4、自定义配置文件

    默认配置文件为类路径下的word.conf,打包在word-x.x.jar中
    自定义配置文件为类路径下的word.local.conf,需要用户自己提供
    如果自定义配置和默认配置相同,自定义配置会覆盖默认配置
    配置文件编码为UTF-8

    5、自定义用户词库

    自定义用户词库为一个或多个文件夹或文件,可以使用绝对路径或相对路径
    用户词库由多个词典文件组成,文件编码为UTF-8
    词典文件的格式为文本文件,一行代表一个词
    可以通过系统属性或配置文件的方式来指定路径,多个路径之间用逗号分隔开
    类路径下的词典文件,需要在相对路径前加入前缀classpath:
    
    指定方式有三种:
        指定方式一,编程指定(高优先级):
            WordConfTools.set("dic.path", "classpath:dic.txt,d:/custom_dic");
            DictionaryFactory.reload();//更改词典路径之后,重新加载词典
        指定方式二,Java虚拟机启动参数(中优先级):
            java -Ddic.path=classpath:dic.txt,d:/custom_dic
        指定方式三,配置文件指定(低优先级):
            使用类路径下的文件word.local.conf来指定配置信息
            dic.path=classpath:dic.txt,d:/custom_dic
    
    如未指定,则默认使用类路径下的dic.txt词典文件

    6、自定义停用词词库

    使用方式和自定义用户词库类似,配置项为:
    stopwords.path=classpath:stopwords.txt,d:/custom_stopwords_dic

    7、自动检测词库变化

    可以自动检测自定义用户词库和自定义停用词词库的变化
    包含类路径下的文件和文件夹、非类路径下的绝对路径和相对路径
    如:
    classpath:dic.txt,classpath:custom_dic_dir,
    d:/dic_more.txt,d:/DIC_DIR,D:/DIC2_DIR,my_dic_dir,my_dic_file.txt
    
    classpath:stopwords.txt,classpath:custom_stopwords_dic_dir,
    d:/stopwords_more.txt,d:/STOPWORDS_DIR,d:/STOPWORDS2_DIR,stopwords_dir,remove.txt

    8、显式指定分词算法

    对文本进行分词时,可显式指定特定的分词算法,如:
    WordSegmenter.seg("APDPlat应用级产品开发平台", SegmentationAlgorithm.BidirectionalMaximumMatching);
    
    SegmentationAlgorithm的可选类型为:   
    正向最大匹配算法:MaximumMatching
    逆向最大匹配算法:ReverseMaximumMatching
    正向最小匹配算法:MinimumMatching
    逆向最小匹配算法:ReverseMinimumMatching
    双向最大匹配算法:BidirectionalMaximumMatching
    双向最小匹配算法:BidirectionalMinimumMatching
    双向最大最小匹配算法:BidirectionalMaximumMinimumMatching
    全切分算法:FullSegmentation
    最少分词算法:MinimalWordCount
    最大Ngram分值算法:MaxNgramScore

    9、分词效果评估

    运行项目根目录下的脚本evaluation.bat可以对分词效果进行评估
    评估采用的测试文本有253 3709行,共2837 4490个字符
    评估结果位于target/evaluation目录下:
    corpus-text.txt为分好词的人工标注文本,词之间以空格分隔
    test-text.txt为测试文本,是把corpus-text.txt以标点符号分隔为多行的结果
    standard-text.txt为测试文本对应的人工标注文本,作为分词是否正确的标准
    result-text-***.txt,***为各种分词算法名称,这是word分词结果
    perfect-result-***.txt,***为各种分词算法名称,这是分词结果和人工标注标准完全一致的文本
    wrong-result-***.txt,***为各种分词算法名称,这是分词结果和人工标注标准不一致的文本

    10、分布式中文分词器

    1、在自定义配置文件word.conf或word.local.conf中指定所有的配置项*.path使用HTTP资源,同时指定配置项redis.*
    2、配置并启动提供HTTP资源的web服务器,将项目:https://github.com/ysc/word_web部署到tomcat
    3、配置并启动redis服务器

    11、词性标注(1.3才有这个功能)

    将分词结果作为输入参数,调用PartOfSpeechTagging类的process方法,词性保存在Word类的partOfSpeech字段中
    如下所示:
    List<Word> words = WordSegmenter.segWithStopWords("我爱中国");
    System.out.println("未标注词性:"+words);
    //词性标注
    PartOfSpeechTagging.process(words);
    System.out.println("标注词性:"+words);
    输出内容:
    未标注词性:[我, 爱, 中国]
    标注词性:[我/r, 爱/v, 中国/ns]

    12、refine

    我们看一个切分例子:
    List<Word> words = WordSegmenter.segWithStopWords("我国工人阶级和广大劳动群众要更加紧密地团结在党中央周围");
    System.out.println(words);
    结果如下:
    [我国, 工人阶级, 和, 广大, 劳动群众, 要, 更加, 紧密, 地, 团结, 在, 党中央, 周围]
    假如我们想要的切分结果是:
    [我国, 工人, 阶级, 和, 广大, 劳动, 群众, 要, 更加, 紧密, 地, 团结, 在, 党中央, 周围]
    也就是要把“工人阶级”细分为“工人 阶级”,把“劳动群众”细分为“劳动 群众”,那么我们该怎么办呢?
    我们可以通过在word.refine.path配置项指定的文件classpath:word_refine.txt中增加以下内容:
    工人阶级=工人 阶级
    劳动群众=劳动 群众
    然后,我们对分词结果进行refine:
    words = WordRefiner.refine(words);
    System.out.println(words);
    这样,就能达到我们想要的效果:
    [我国, 工人, 阶级, 和, 广大, 劳动, 群众, 要, 更加, 紧密, 地, 团结, 在, 党中央, 周围]
    
    我们再看一个切分例子:
    List<Word> words = WordSegmenter.segWithStopWords("在实现“两个一百年”奋斗目标的伟大征程上再创新的业绩");
    System.out.println(words);
    结果如下:
    [在, 实现, 两个, 一百年, 奋斗目标, 的, 伟大, 征程, 上, 再创, 新的, 业绩]
    假如我们想要的切分结果是:
    [在, 实现, 两个一百年, 奋斗目标, 的, 伟大征程, 上, 再创, 新的, 业绩]
    也就是要把“两个 一百年”合并为“两个一百年”,把“伟大, 征程”合并为“伟大征程”,那么我们该怎么办呢?
    我们可以通过在word.refine.path配置项指定的文件classpath:word_refine.txt中增加以下内容:
    两个 一百年=两个一百年
    伟大 征程=伟大征程
    然后,我们对分词结果进行refine:
    words = WordRefiner.refine(words);
    System.out.println(words);
    这样,就能达到我们想要的效果:
    [在, 实现, 两个一百年, 奋斗目标, 的, 伟大征程, 上, 再创, 新的, 业绩]

    13、同义标注

    List<Word> words = WordSegmenter.segWithStopWords("楚离陌千方百计为无情找回记忆");
    System.out.println(words);
    结果如下:
    [楚离陌, 千方百计, 为, 无情, 找回, 记忆]
    做同义标注:
    SynonymTagging.process(words);
    System.out.println(words);
    结果如下:
    [楚离陌, 千方百计[久有存心, 化尽心血, 想方设法, 费尽心机], 为, 无情, 找回, 记忆[影象]]
    如果启用间接同义词:
    SynonymTagging.process(words, false);
    System.out.println(words);
    结果如下:
    [楚离陌, 千方百计[久有存心, 化尽心血, 想方设法, 费尽心机], 为, 无情, 找回, 记忆[影像, 影象]]
    
    List<Word> words = WordSegmenter.segWithStopWords("手劲大的老人往往更长寿");
    System.out.println(words);
    结果如下:
    [手劲, 大, 的, 老人, 往往, 更, 长寿]
    做同义标注:
    SynonymTagging.process(words);
    System.out.println(words);
    结果如下:
    [手劲, 大, 的, 老人[白叟], 往往[常常, 每每, 经常], 更, 长寿[长命, 龟龄]]
    如果启用间接同义词:
    SynonymTagging.process(words, false);
    System.out.println(words);
    结果如下:
    [手劲, 大, 的, 老人[白叟], 往往[一样平常, 一般, 凡是, 寻常, 常常, 常日, 平凡, 平居, 平常, 平日, 平时, 往常, 日常, 日常平凡, 时常, 普通, 每每, 泛泛, 素日, 经常, 通俗, 通常], 更, 长寿[长命, 龟龄]]
    
    以词“千方百计”为例:
    可以通过Word的getSynonym()方法获取同义词如:
    System.out.println(word.getSynonym());
    结果如下:
    [久有存心, 化尽心血, 想方设法, 费尽心机]
    注意:如果没有同义词,则getSynonym()返回空集合:Collections.emptyList()
    
    间接同义词和直接同义词的区别如下:
    假设:
    A和B是同义词,A和C是同义词,B和D是同义词,C和E是同义词
    则:
    对于A来说,A B C是直接同义词
    对于B来说,A B D是直接同义词
    对于C来说,A C E是直接同义词
    对于A B C来说,A B C D E是间接同义词

    14、反义标注

    List<Word> words = WordSegmenter.segWithStopWords("5月初有哪些电影值得观看");
    System.out.println(words);
    结果如下:
    [5, 月初, 有, 哪些, 电影, 值得, 观看]
    做反义标注:
    AntonymTagging.process(words);
    System.out.println(words);
    结果如下:
    [5, 月初[月底, 月末, 月终], 有, 哪些, 电影, 值得, 观看]
    
    List<Word> words = WordSegmenter.segWithStopWords("由于工作不到位、服务不完善导致顾客在用餐时发生不愉快的事情,餐厅方面应该向顾客作出真诚的道歉,而不是敷衍了事。");
    System.out.println(words);
    结果如下:
    [由于, 工作, 不到位, 服务, 不完善, 导致, 顾客, 在, 用餐, 时, 发生, 不愉快, 的, 事情, 餐厅, 方面, 应该, 向, 顾客, 作出, 真诚, 的, 道歉, 而不是, 敷衍了事]
    做反义标注:
    AntonymTagging.process(words);
    System.out.println(words);
    结果如下:
    [由于, 工作, 不到位, 服务, 不完善, 导致, 顾客, 在, 用餐, 时, 发生, 不愉快, 的, 事情, 餐厅, 方面, 应该, 向, 顾客, 作出, 真诚[糊弄, 虚伪, 虚假, 险诈], 的, 道歉, 而不是, 敷衍了事[一丝不苟, 兢兢业业, 尽心竭力, 竭尽全力, 精益求精, 诚心诚意]]
    
    以词“月初”为例:
    可以通过Word的getAntonym()方法获取反义词如:
    System.out.println(word.getAntonym());
    结果如下:
    [月底, 月末, 月终]
    注意:如果没有反义词,getAntonym()返回空集合:Collections.emptyList()

    15、拼音标注

    List<Word> words = WordSegmenter.segWithStopWords("《速度与激情7》的中国内地票房自4月12日上映以来,在短短两周内突破20亿人民币");
    System.out.println(words);
    结果如下:
    [速度, 与, 激情, 7, 的, 中国, 内地, 票房, 自, 4月, 12日, 上映, 以来, 在, 短短, 两周, 内, 突破, 20亿, 人民币]
    执行拼音标注:
    PinyinTagging.process(words);
    System.out.println(words);
    结果如下:
    [速度 sd sudu, 与 y yu, 激情 jq jiqing, 7, 的 d de, 中国 zg zhongguo, 内地 nd neidi, 票房 pf piaofang, 自 z zi, 4月, 12日, 上映 sy shangying, 以来 yl yilai, 在 z zai, 短短 dd duanduan, 两周 lz liangzhou, 内 n nei, 突破 tp tupo, 20亿, 人民币 rmb renminbi]
    
    以词“速度”为例:
    可以通过Word的getFullPinYin()方法获取完整拼音如:sudu
    可以通过Word的getAcronymPinYin()方法获取首字母缩略拼音如:sd

    16、Lucene插件:

    1、构造一个word分析器ChineseWordAnalyzer
    Analyzer analyzer = new ChineseWordAnalyzer();
    如果需要使用特定的分词算法,可通过构造函数来指定:
    Analyzer analyzer = new ChineseWordAnalyzer(SegmentationAlgorithm.FullSegmentation);
    如不指定,默认使用双向最大匹配算法:SegmentationAlgorithm.BidirectionalMaximumMatching
    可用的分词算法参见枚举类:SegmentationAlgorithm
    
    2、利用word分析器切分文本
    TokenStream tokenStream = analyzer.tokenStream("text", "杨尚川是APDPlat应用级产品开发平台的作者");
    //准备消费
    tokenStream.reset();
    //开始消费
    while(tokenStream.incrementToken()){
        //词
        CharTermAttribute charTermAttribute = tokenStream.getAttribute(CharTermAttribute.class);
        //词在文本中的起始位置
        OffsetAttribute offsetAttribute = tokenStream.getAttribute(OffsetAttribute.class);
        //第几个词
        PositionIncrementAttribute positionIncrementAttribute = tokenStream.getAttribute(PositionIncrementAttribute.class);
        //词性
        PartOfSpeechAttribute partOfSpeechAttribute = tokenStream.getAttribute(PartOfSpeechAttribute.class);
        //首字母缩略拼音
        AcronymPinyinAttribute acronymPinyinAttribute = tokenStream.getAttribute(AcronymPinyinAttribute.class);
        //完整拼音
        FullPinyinAttribute fullPinyinAttribute = tokenStream.getAttribute(FullPinyinAttribute.class);
        //同义词
        SynonymAttribute synonymAttribute = tokenStream.getAttribute(SynonymAttribute.class);
        //反义词
        AntonymAttribute antonymAttribute = tokenStream.getAttribute(AntonymAttribute.class);
    
        LOGGER.info(charTermAttribute.toString()+" ("+offsetAttribute.startOffset()+" - "+offsetAttribute.endOffset()+") "+positionIncrementAttribute.getPositionIncrement());
        LOGGER.info("PartOfSpeech:"+partOfSpeechAttribute.toString());
        LOGGER.info("AcronymPinyin:"+acronymPinyinAttribute.toString());
        LOGGER.info("FullPinyin:"+fullPinyinAttribute.toString());
        LOGGER.info("Synonym:"+synonymAttribute.toString());
        LOGGER.info("Antonym:"+antonymAttribute.toString());
    }
    //消费完毕
    tokenStream.close();
    
    3、利用word分析器建立Lucene索引
    Directory directory = new RAMDirectory();
    IndexWriterConfig config = new IndexWriterConfig(analyzer);
    IndexWriter indexWriter = new IndexWriter(directory, config);
    
    4、利用word分析器查询Lucene索引
    QueryParser queryParser = new QueryParser("text", analyzer);
    Query query = queryParser.parse("text:杨尚川");
    TopDocs docs = indexSearcher.search(query, Integer.MAX_VALUE);

    17、Solr插件:

    1、下载word-1.3.jar
    下载地址:http://search.maven.org/remotecontent?filepath=org/apdplat/word/1.3/word-1.3.jar
    
    2、创建目录solr-5.1.0/example/solr/lib,将word-1.3.jar复制到lib目录
    
    3、配置schema指定分词器
    将solr-5.1.0/example/solr/collection1/conf/schema.xml文件中所有的
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>和
    <tokenizer class="solr.StandardTokenizerFactory"/>全部替换为
    <tokenizer class="org.apdplat.word.solr.ChineseWordTokenizerFactory"/>
    并移除所有的filter标签
    
    4、如果需要使用特定的分词算法:
    <tokenizer class="org.apdplat.word.solr.ChineseWordTokenizerFactory" segAlgorithm="ReverseMinimumMatching"/>
    segAlgorithm可选值有:  
    正向最大匹配算法:MaximumMatching
    逆向最大匹配算法:ReverseMaximumMatching
    正向最小匹配算法:MinimumMatching
    逆向最小匹配算法:ReverseMinimumMatching
    双向最大匹配算法:BidirectionalMaximumMatching
    双向最小匹配算法:BidirectionalMinimumMatching
    双向最大最小匹配算法:BidirectionalMaximumMinimumMatching
    全切分算法:FullSegmentation
    最少分词算法:MinimalWordCount
    最大Ngram分值算法:MaxNgramScore
    如不指定,默认使用双向最大匹配算法:BidirectionalMaximumMatching
    
    5、如果需要指定特定的配置文件:
    <tokenizer class="org.apdplat.word.solr.ChineseWordTokenizerFactory" segAlgorithm="ReverseMinimumMatching"
            conf="solr-5.1.0/example/solr/nutch/conf/word.local.conf"/>
    word.local.conf文件中可配置的内容见 word-1.3.jar 中的word.conf文件
    如不指定,使用默认配置文件,位于 word-1.3.jar 中的word.conf文件

    18、ElasticSearch插件:

    1、打开命令行并切换到elasticsearch的bin目录
    cd elasticsearch-1.5.1/bin
    
    2、运行plugin脚本安装word分词插件:
    ./plugin -u http://apdplat.org/word/archive/v1.2.zip -i word
    
    3、修改文件elasticsearch-1.5.1/config/elasticsearch.yml,新增如下配置:    
    index.analysis.analyzer.default.type : "word"
    index.analysis.tokenizer.default.type : "word"
    
    4、启动ElasticSearch测试效果,在Chrome浏览器中访问:    
    http://localhost:9200/_analyze?analyzer=word&text=杨尚川是APDPlat应用级产品开发平台的作者
    
    5、自定义配置
    修改配置文件elasticsearch-1.5.1/plugins/word/word.local.conf
    
    6、指定分词算法
    修改文件elasticsearch-1.5.1/config/elasticsearch.yml,新增如下配置:
    index.analysis.analyzer.default.segAlgorithm : "ReverseMinimumMatching"
    index.analysis.tokenizer.default.segAlgorithm : "ReverseMinimumMatching"
    
    这里segAlgorithm可指定的值有:
    正向最大匹配算法:MaximumMatching
    逆向最大匹配算法:ReverseMaximumMatching
    正向最小匹配算法:MinimumMatching
    逆向最小匹配算法:ReverseMinimumMatching
    双向最大匹配算法:BidirectionalMaximumMatching
    双向最小匹配算法:BidirectionalMinimumMatching
    双向最大最小匹配算法:BidirectionalMaximumMinimumMatching
    全切分算法:FullSegmentation
    最少分词算法:MinimalWordCount
    最大Ngram分值算法:MaxNgramScore
    如不指定,默认使用双向最大匹配算法:BidirectionalMaximumMatching

    19、Luke插件:

    1、下载http://luke.googlecode.com/files/lukeall-4.0.0-ALPHA.jar(国内不能访问)
    
    2、下载并解压Java中文分词组件word-1.0-bin.zip:http://pan.baidu.com/s/1dDziDFz
    
    3、将解压后的 Java中文分词组件word-1.0-bin/word-1.0 文件夹里面的4个jar包解压到当前文件夹
    用压缩解压工具如winrar打开lukeall-4.0.0-ALPHA.jar,将当前文件夹里面除了META-INF文件夹、.jar、
    .bat、.html、word.local.conf文件外的其他所有文件拖到lukeall-4.0.0-ALPHA.jar里面
    
    4、执行命令 java -jar lukeall-4.0.0-ALPHA.jar 启动luke,在Search选项卡的Analysis里面
    就可以选择 org.apdplat.word.lucene.ChineseWordAnalyzer 分词器了
    
    5、在Plugins选项卡的Available analyzers found on the current classpath里面也可以选择 
    org.apdplat.word.lucene.ChineseWordAnalyzer 分词器
    
    注意:如果你要自己集成word分词器的其他版本,在项目根目录下运行mvn install编译项目,然后运行命令
    mvn dependency:copy-dependencies复制依赖的jar包,接着在target/dependency/目录下就会有所有
    的依赖jar包。其中target/dependency/slf4j-api-1.6.4.jar是word分词器使用的日志框架,
    target/dependency/logback-classic-0.9.28.jar和
    target/dependency/logback-core-0.9.28.jar是word分词器推荐使用的日志实现,日志实现的配置文件
    路径位于target/classes/logback.xml,target/word-1.3.jar是word分词器的主jar包,如果需要
    自定义词典,则需要修改分词器配置文件target/classes/word.conf

    已经集成好的Luke插件下载(适用于lucene4.0.0) :lukeall-4.0.0-ALPHA-with-word-1.0.jar

    已经集成好的Luke插件下载(适用于lucene4.10.3):lukeall-4.10.3-with-word-1.2.jar

    20、词向量:

    从大规模语料中统计一个词的上下文相关词,并用这些上下文相关词组成的向量来表达这个词。
    通过计算词向量的相似性,即可得到词的相似性。
    相似性的假设是建立在如果两个词的上下文相关词越相似,那么这两个词就越相似这个前提下的。
    
    通过运行项目根目录下的脚本demo-word-vector-corpus.bat来体验word项目自带语料库的效果
    
    如果有自己的文本内容,可以使用脚本demo-word-vector-file.bat来对文本分词、建立词向量、计算相似性

    分词算法效果评估:

    1、word分词 最大Ngram分值算法:
    分词速度:397.73047 字符/毫秒
    行数完美率:59.93%  行数错误率:40.06%  总的行数:2533709  完美行数:1518525  错误行数:1015184
    字数完美率:51.56% 字数错误率:48.43% 总的字数:28374490 完美字数:14632098 错误字数:13742392
    
    2、word分词 全切分算法:
    分词速度:67.032585 字符/毫秒
    行数完美率:57.2%  行数错误率:42.79%  总的行数:2533709  完美行数:1449288  错误行数:1084421
    字数完美率:47.95% 字数错误率:52.04% 总的字数:28374490 完美字数:13605742 错误字数:14768748
    
    3、word分词 双向最大最小匹配算法:
    分词速度:367.99805 字符/毫秒
    行数完美率:53.06%  行数错误率:46.93%  总的行数:2533709  完美行数:1344624  错误行数:1189085
    字数完美率:43.07% 字数错误率:56.92% 总的字数:28374490 完美字数:12221610 错误字数:16152880
    
    4、word分词 最少分词算法:
    分词速度:364.40622 字符/毫秒
    行数完美率:47.75%  行数错误率:52.24%  总的行数:2533709  完美行数:1209976  错误行数:1323733
    字数完美率:37.59% 字数错误率:62.4% 总的字数:28374490 完美字数:10666443 错误字数:17708047
    
    5、word分词 双向最小匹配算法:
    分词速度:657.13635 字符/毫秒
    行数完美率:46.34%  行数错误率:53.65%  总的行数:2533709  完美行数:1174276  错误行数:1359433
    字数完美率:36.07% 字数错误率:63.92% 总的字数:28374490 完美字数:10236574 错误字数:18137916
    
    6、word分词 双向最大匹配算法:
    分词速度:539.0905 字符/毫秒
    行数完美率:46.18%  行数错误率:53.81%  总的行数:2533709  完美行数:1170075  错误行数:1363634
    字数完美率:35.65% 字数错误率:64.34% 总的字数:28374490 完美字数:10117122 错误字数:18257368
    
    7、word分词 正向最大匹配算法:
    分词速度:662.2127 字符/毫秒
    行数完美率:41.88%  行数错误率:58.11%  总的行数:2533709  完美行数:1061189  错误行数:1472520
    字数完美率:31.35% 字数错误率:68.64% 总的字数:28374490 完美字数:8896173 错误字数:19478317
    
    8、word分词 逆向最大匹配算法:
    分词速度:1082.0459 字符/毫秒
    行数完美率:41.69%  行数错误率:58.3%  总的行数:2533709  完美行数:1056515  错误行数:1477194
    字数完美率:30.98% 字数错误率:69.01% 总的字数:28374490 完美字数:8792532 错误字数:19581958
    
    9、word分词 逆向最小匹配算法:
    分词速度:1906.6315 字符/毫秒
    行数完美率:41.42%  行数错误率:58.57%  总的行数:2533709  完美行数:1049673  错误行数:1484036
    字数完美率:31.34% 字数错误率:68.65% 总的字数:28374490 完美字数:8893622 错误字数:19480868
    
    10、word分词 正向最小匹配算法:
    分词速度:1839.1554 字符/毫秒
    行数完美率:36.7%  行数错误率:63.29%  总的行数:2533709  完美行数:930069  错误行数:1603640
    字数完美率:26.72% 字数错误率:73.27% 总的字数:28374490 完美字数:7583741 错误字数:20790749

    相关文章:

    1、中文分词算法 之 基于词典的正向最大匹配算法

    2、中文分词算法 之 基于词典的逆向最大匹配算法

    3、中文分词算法 之 词典机制性能优化与测试

    4、中文分词算法 之 基于词典的正向最小匹配算法

    5、中文分词算法 之 基于词典的逆向最小匹配算法

    6、一种利用ngram模型来消除歧义的中文分词方法

    7、一种基于词性序列的人名识别方法

    8、中文分词算法 之 基于词典的全切分算法

    9、9大Java开源中文分词器的使用方法和分词效果对比

    10、中文分词之11946组同义词

    11、中文分词之9271组反义词

    12、如何利用多核提升分词速度

    展开全文
  • 在用vc写一个读取word文档内容的程序,需要在线程中调用word的COM组件,需要注意什么事项吗?
  • OpenXml相对于用MS提供的COM组件来生成WORD,有如下优势: 1.相对于MS 的COM组件,因为版本带来的不兼容问题,及各种会生成WORD半途会崩溃的问题. 2.对比填满一张30多页的WORD来说(包含图,表等),用COM组件来生成会...
  • Aspose.word组件介绍

    千次阅读 2018-10-23 09:59:38
    1.基本介绍 Aspose.Words是一个商业.NET类库,可以使得应用程序处理...使用Aspose.Words可以在不使用Microsoft.Word的情况下生成、修改、转换和打印文档。在项目中使用Aspose.Words可以有以下好处。 1.1丰富的功...
  • word组件 导出使用

    千次阅读 2011-12-28 19:24:02
    2:在"开始"->"运行"中输入dcomcnfg.exe启动"组件服务" 3:依次双击"组件服务"->"计算机"->"我的电脑"->"DCOM配置" 4:在"DCOM配置"中找到"Microsoft word 应用程序",在它上面点击右键,然后点击"属性",弹出...
  • 服务器配置Word COM组件步骤

    千次阅读 2018-04-14 09:14:13
    3.找到节点 【Microsoft Word 97 - 2003】 文档节点 4.右键 -&gt; 属性 5.选择【安全】tab 以下3个项目全部选择自定义选项:启动和激活权限、访问权限、配置权限 然后各自编辑添加用户,将对应下方的...
  • 用Servers组件控制Word

    千次阅读 2010-07-10 22:59:00
    1)控制Word的Servers组件简介 在Delphi中控制Word组件主要有WordApplication和WordDocument等。 WordApplication对象主要用于启动并建立对Word的连接,并对打开Word时的有关内容进行设置。WordDocument...
  • office 2007 word组件

    千次阅读 2012-10-18 09:50:17
    来自:... office 2007 word组件 1、如果你手头有OFFICE 2007的安装程序的话 打开OFFCE安装程序-选择\"添加或删除功能\" 新添加\"office 共享功能\"中的\"visual Basic for Applications\
  • 1、首先我安装的是word2003,因此需要安装...控制面板-》管理工具-》组件服务-》计算机-》我的电脑-》DCom配置-》找到Microsoft Word文档 单击属性打开此应用程序的属性对话框。
  • 因为这类问题基本上都是授权问题,现在先解释一下这几个登陆标识:The interactive user 交互式用户 、The launching user 、this user 、the system account(services only)  下面引用了微软文档 ,翻译使用的是...
  • 使用Interop组件,C#可以方便地读取word文件的内容,但在网上找到的资料不是很完整,希望大家能提供一些比较完整的相关资料。 勤奋学习,天天向上。
  • 最近给单位做了一个小的网站,里面涉及在网页中浏览word文档,引用了microsoft.office.interop.word组件,由于要保存格式,我就在文档上传的时候先把word文档转化成html格式,然后浏览的时候打开html格式文件. ...
  • c#调用word com组件 替换书签套打

    千次阅读 2015-05-08 14:38:32
    c#调用word com组件 替换书签套打
  • 解决PHP调用Word组件DCOM权限问题

    千次阅读 2017-12-21 20:42:35
    windows+r : 输入 dcomcnfg.exe 打开组件服务,然后双击 组件服务 ==> 双击 计算机 ==> 双击 我的电脑 ==> 打开 DCOM配置 找到 Microsoft Word 97 - 2003 文档 然后右键点击属性。 出现如下页面: 将身份验证...
  • 【原创翻译】开源Word读写组件DocX介绍与入门[资料已发送]  我也是通过看上面的入门的。 1.DocX通过word模板批量导出用户简历  由于Docx有两种方法可以自定义属性:1.1通过word模板文件(在word模板中...
  • 如果在程序中用到word或者excel服务的时候,默认情况下是不开启的。...思路就是找到组件服务,excel应用程序属性设置,交互式用户,然后在权限那里加入network service账号的权限,其他系统是asp.net帐户
  • springboot poi 组件处理 word excel表格

    千次阅读 2018-05-29 10:29:14
    -- excel word 处理组件 --&gt; &lt;dependency&gt; &lt;groupId&gt;org.apache.poi&lt;/groupId&gt; &lt;artifactId&gt;poi&lt;/artifactId&gt; &lt;...
  • 如果在程序中用到word或者excel服务的时候,默认情况下是不开启的。...思路就是找到组件服务,excel应用程序属性设置,交互式用户,然后在权限那里加入network service账号的权限,其他系统是asp.net
  • 读写Word组件DocX介绍与入门

    千次阅读 2016-04-03 16:07:19
    本文为转载内容: 文章原地址:...  开源Word读写组件DocX介绍与入门 阅读目录 1.前言2.DocX的主要特点3.DocX入门例子4.资源  本博客所有文章分类的总目录:http://www.cnblogs.com/as
  • 解决 interop.word 外部组件异常

    千次阅读 2012-07-05 14:05:16
    未处理 System.Runtime.InteropServices.SEHException  Message="外部组件发生异常。"  Source="Interop.Word"  ErrorCode=-2147467259  StackTrace:
  • 这是《文本语音朗读组件》的一个子工程:集成到WORD软件中的一个插件,安装后,会在WORD工具栏上注册一个按纽,按下此按纽时,会将当前文档的全部内容朗读出来。
  • 在上一篇《C#生成word查找替换中的问题》博客中提到的外部组件发生异常,终于被师兄搞定了,原来是msword.olb没有被注册,这通常是安装office时的意外。 使用Regtlib.exe "C:\Program Files\Microsoft Office\...
  • 使用COM组件读写word文档

    千次阅读 2013-05-14 18:21:15
    引用组件: 在菜单栏选择“项目”-“添加引用”,弹出的窗口中我们可以选择“COM”选项卡,找到Microsoft Office 12.0 Object Library(Office 2003/2007需要使用12.0版的,如果你使用的是Office 2000或者更低的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 83,855
精华内容 33,542
关键字:

word是什么的组件