用Office玩中文分词

原创 2006年06月23日 17:57:00

      Word软件对中文分词的支持还是相当不错的,最直观的感觉就是当用户在编辑一篇Doc文档时,Word会不断检测其拼写错误(包括英文单词和中文单词);不仅如此,您可能还留意到当用鼠标双击文档中的某一个字时,包含这个字的词会被自动选中。比如,我是中国人这句话,当您双击时,中国人这个词会被选中(双击也会有同样的效果)。这些迹象表Word是支持中文分词的,而且根据笔者使用office2003的经验,它的分词效果还挺不错。

  如果能在应用程序中调用Word的分词功能,岂不是很便利。于是,笔者就想做一个简单的实验,编个小程序试试。很自然就想到Word中的,以及"VBA"。首先点击录制宏,然后按Ctrl+A。我发现在Word的宏编辑器里生成一些VB代码,其中有个Selection对象,应该是代表选中区域,进步进一步摸索,发现Selection.Words就是我要的东西,它是将选中区域分词后得到的单词数组。除此之外,Selection还有很多属性及方法,比如Selection.Sentences是所有句子的数组。
       接下来把Word中零零散散的VBA代码移植到VB6.0中去。这个小程序的基本功能:在A框输入段文章,用户点击按钮后,在B框中输出分词后的效果,所有的词之间用空格隔开。
       VB代码如下:
 
Option Explicit
Dim wdapp As Word.Application
Dim doc As Word.Document

Private Sub Command1_Click()
    'On Error Resume Next
 
    Dim segwords As String
    Me.Command1.Caption = "正在执行..."
    Me.Command1.Enabled = False
       
   
    segwords = ""
    wdapp.Selection.HomeKey Unit:=wdStory
    wdapp.Selection.TypeText Me.Text1.Text
    wdapp.Selection.WholeStory
    Dim i As Integer
    For i = 1 To wdapp.Selection.Words.Count
        segwords = segwords + wdapp.Selection.Words(i) + " "
        DoEvents
    Next i
   
    wdapp.Selection.Delete Unit:=wdCharacter, Count:=1
    Me.Command1.Caption = "开始测试"
    Me.Command1.Enabled = True
    Me.Text2.Text = segwords
End Sub

Private Sub Form_Load()
    Set wdapp = New Word.Application
    Set doc = wdapp.Documents.Add
    wdapp.ActiveDocument.SaveAs "c://~ftemp.doc"
End Sub
Private Sub Form_Terminate()
    doc.Close
    Set doc = Nothing
    wdapp.Quit savechanges:=False
    Set wdapp = Nothing
End Sub

程序运行的效果如下图:

分词效果似乎还不差,但当笔者用较长的文章进行测试时,速度非常慢,和ICTCLAS分词不在一个量级上。开始我以为是VB的解释执行造成的,用Delphi改写后速度有所提升,但速度还是不理想。
Delphi代码如下:
 
unit Unit1;
 
interface
 
uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, ComCtrls, StdCtrls, Buttons,comobj;
 
type
 TForm1 = class(TForm)
    StatusBar1: TStatusBar;
    GroupBox1: TGroupBox;
    GroupBox2: TGroupBox;
    BitBtn1: TBitBtn;
    Memo1: TMemo;
    Memo2: TMemo;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
 private
    { Private declarations }
 public
    { Public declarations }
 end;
 
var
 Form1: TForm1;
 wdapp: Variant;
 doc:Variant;
implementation
 
{$R *.dfm}
 
procedure TForm1.FormCreate(Sender: TObject);
begin
    wdapp:=createoleobject('Word.Application');
    wdapp.visible:=false;
    doc:=wdapp.Documents.Add();
    wdapp.ActiveDocument.SaveAs('c://~ftemp.doc');
end;
 
procedure TForm1.FormDestroy(Sender: TObject);
begin
    doc.Close;
    wdapp.Quit(savechanges:=False);
end;
 
procedure TForm1.BitBtn1Click(Sender: TObject);
var
segwords : TStringList;
wdStory,wdCharacter : OleVariant;
i: Integer;
begin
    wdStory:=6;
    wdCharacter:=1;
    segwords:=TStringList.Create;
    self.BitBtn1.Caption:='正在执行';
    self.BitBtn1.Enabled:=false;
    wdapp.Selection.HomeKey(wdStory) ;
    wdapp.Selection.TypeText(self.Memo1.Lines.Text);
    wdapp.Selection.WholeStory ;
    for i:=1 to wdapp.Selection.Words.Count do
    begin
      segwords.Append(wdapp.Selection.Words.Item(i));
    end;
    wdapp.Selection.Delete(wdCharacter,1);
    self.BitBtn1.Caption:='开始测试';
    self.BitBtn1.Enabled:=true;
 
    self.Memo2.Text:=segwords.Text;
end;
 
end.

微软亚洲研究院中文分词语料库

  • 2015年01月21日 12:02
  • 4.59MB
  • 下载

中文分词excel版本

  • 2013年09月06日 11:24
  • 9.27MB
  • 下载

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

原文地址:http://my.oschina.net/apdplat/blog/412921 本文的目标有两个: 1、学会使用10大Java开源中文分词器 2、对比分析10 大J...
  • yjl33
  • yjl33
  • 2016年06月14日 10:17
  • 6430

中文分词整理

背景 存在中文分词技术,是由于中文在基本文法上有其特殊性,具体表现在: 1.以英文为代表的拉丁语系语言相比,英文以空格作为天然的分隔符,而中文由于继承自古代汉语的传统,词语之间没有分隔。 ...
  • shenxiaoming77
  • shenxiaoming77
  • 2015年09月23日 16:48
  • 2106

用Office玩中文分词

      Word软件对中文分词的支持还是相当不错的,最直观的感觉就是当用户在编辑一篇Doc文档时,Word会不断检测其拼写错误(包括英文单词和中文单词);不仅如此,您可能还留意到当用鼠标双击文档中...
  • fxsjy
  • fxsjy
  • 2006年06月23日 17:57
  • 3172

【中文分词】亲手开发一款中文分词器——原理

前文已经谈到几种分词方法的手段和困难,本文将从最基本原理开始,一步一步分析我自己的分词器是如何开发的。 从最初出发点开始,我们需要确定那些字的组合是词语。每两个字能否组合成词语,其实取决于两个字同时以...
  • mychaint
  • mychaint
  • 2015年07月10日 13:38
  • 1461

用HMM模型进行中文分词

用HMM模型进行中文分词
  • PKU_ZZY
  • PKU_ZZY
  • 2017年02月22日 09:49
  • 1034

SCWS 中文分词

第一步:准备好Pscws4资料 下载 XDB 词典文件 【简体中文(UTF-8)】 下载PSCWS4【pscws4-20081221.tar.bz2】 下载规则集文件【rules.tgz】 ...
  • A9925
  • A9925
  • 2017年01月03日 21:40
  • 455

windows 安装 solr4.6 + 中文分词 有图有真相

windows 安装 solr4.6 + 中文分词 有图有真相
  • qq346625506
  • qq346625506
  • 2015年09月01日 18:14
  • 623

windows平台使用hadoop hdfs文件进行中文分词的示例代码

  • 2017年11月08日 12:40
  • 4.29MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用Office玩中文分词
举报原因:
原因补充:

(最多只允许输入30个字)