Categories


Tags


中文分词和TF-IDF

中文分词(Chinese Word Segmentation)指的是将一个汉字序列切分成一个一个单独的词。中文分词是文本挖掘的基础,对于输入的一段中文,成功的进行中文分词,可以达到电脑自动识别语句含义的效果。

TF-IDF(term frequency–inverse document frequency)是一种用于信息搜索和信息挖掘的常用加权技术。在搜索、文献分类和其他相关领域有广泛的应用。

TF-IDF的主要思想是,如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。TF词频(Term Frequency)指的是某一个给定的词语在该文件中出现的次数。IDF反文档频率(Inverse Document Frequency)的主要思想是:如果包含词条的文档越少,IDF越大,则说明词条具有很好的类别区分能力。

使用TF*IDF可以计算某个关键字在某篇文章里面的重要性,因而识别这篇文章的主要含义,实现计算机读懂文章的功能。

常见中文分词开源项目:

SCWS:

Hightman开发的一套基于词频词典的机械中文分词引擎,它能将一整段的汉字基本正确的切分成词。采用的是采集的词频词典,并辅以一定的专有名称,人名,地名,数字年代等规则识别来达到基本分词,经小范围测试大概准确率在 90% ~ 95% 之间,已能基本满足一些小型搜索引擎、关键字提取等场合运用。45Kb左右的文本切词时间是0.026秒,大概是1.5MB文本/秒,支持PHP4和PHP 5。

ICTCLAS:

这可是最早的中文开源分词项目之一,ICTCLAS在国内973专家组组织的评测中活动获得了第一名,在第一届国际中文处理研究机构SigHan组织的评测中都获得了多项第一名。ICTCLAS3.0分词速度单机996KB/s,分词精度98.45%,API不超过200KB,各种词典数据压缩后不到3M.ICTCLAS全部采用C/C++编写,支持Linux、FreeBSD及Windows系列操作系统,支持C/C++、C#、Delphi、Java等主流的开发语言。

HTTPCWS:

HTTPCWS 是一款基于HTTP协议的开源中文分词系统,目前仅支持Linux系统。HTTPCWS 使用“ICTCLAS 3.0 2009共享版中文分词算法”的API进行分词处理,得出分词结果。HTTPCWS 将取代之前的 PHPCWS 中文分词扩展。

庖丁解牛分词:

Java 提供lucence 接口,仅支持Java语言。

CC-CEDICT:

一个中文词典开源项目,提供一份以汉语拼音为中文辅助的汉英辞典,截至2009年2月8日,已收录82712个单词。其词典可以用于中文分词使用,而且不存在版权问题。Chrome中文版就是使用的这个词典进行中文分词的。

基于VB/ASP的中文分词

上面的开源项目没有给予VB和ASP的,这里提供一个简单的VB/ASP类,加上词典之后就可以进行分词了,注意这个类只供演示,其分词速度极慢不适合实际应用。

类名为:WordSplit

Private rootTable As String

Private Function GetCount(ByVal s As String) As Long

GetCount = InStr(1, rootTable, s)

End Function

Public Function WordCount(ByVal strString As String, ByVal strGetWord As String) As Long

Dim k

k = Split(strString, strGetWord)

WordCount = UBound(k)

End Function

' 分析输入的字符串,将其切割成一个个的词语。

' <param name="s">待切割的字符串</param>

' <returns>所切割得到的中文词语数组</returns>

Public Function ParseChinese(ByVal s As String, ByVal separator As String) As String

Dim lngLength As Long

Dim strTemp As String

Dim ArrayList As String

Dim i, j

ArrayList = ""

lngLength = Len(s)

i = 1

While i < lngLength

strTemp = Mid(s, i, 1)

If GetCount(strTemp) > 1 Then

j = 2

While i + j < lngLength + 1 And GetCount(Mid(s, i, j)) > 0

j = j + 1

Wend

strTemp = Mid(s, i, j - 1)

i = i + j - 2

End If

i = i + 1

'WordAdd (temp)

ArrayList = ArrayList + strTemp + separator

Wend

ParseChinese = ArrayList

End Function

Private Sub Class_Initialize()

Dim fso, templetfile, txtfile

templetfile = App.Path + "\ChineseDictionary.txt"

Set fso = CreateObject("Scripting.FileSystemObject")

Set txtfile = fso.OpenTextFile(templetfile, 1)

rootTable = txtfile.ReadAll

txtfile.Close

End Sub

调用示例:

strInput = "中文分词指的是将一个汉字序列切分成一个一个单独的词。中文分词是文本挖掘的基础,对于输入的一段中文,成功的进行中文分词,可以达到电脑自动识别语句含义的效果。"

Dim strWordSplit As New WordSplit

strSubject = strWordSplit.ParseChinese(strInput, "|")

arrSubject = Split(strSubject, "|")

来源:月光博客


Public @ 2016-02-22 16:12:36

百度搜索引擎工作原理-3-检索排序

搜索引擎索引系统概述众所周知,搜索引擎的主要工作过程包括:抓取、存储、页面分析、索引、检索等几个主要过程。上一章我们主要介绍了部分抓取存储环节中的内容,此章简要介绍一下索引系统。在以亿为单位的网页库中查找特定的某些关键词犹如大海里面捞针,也许一定的时间内可以完成查找,但是用户等不起,从用户体验角度我们必须在毫秒级别给予用户满意的结果,否则用户只能流失。怎样才能达到这种要求呢?如果能知道用户查找的关

Public @ 2022-09-15 16:21:46

百度搜索引擎工作原理-5-结果展现

结构化数据——助力站点获得更多点击网页经历了抓取建库,参与了排序计算,最终展现在搜索引擎用户面前。目前在百度搜索左侧结果展现形式很多,如:凤巢、品牌专区、自然结果等,一条自然结果怎样才能获得更多的点击,是站长要考虑的重要一环。目前自然结果里又分为两类,见下图,第一个,即结构化展现,形式比较多样。目前覆盖80%的搜索需求,即80%的关键词下会出现这种复杂展现样式;第二个即一段摘要式展现,最原始的展现

Public @ 2021-09-11 16:21:45

中文分词和TF-IDF

中文分词(Chinese Word Segmentation)指的是将一个汉字序列切分成一个一个单独的词。中文分词是文本挖掘的基础,对于输入的一段中文,成功的进行中文分词,可以达到电脑自动识别语句含义的效果。TF-IDF(term frequency–inverse document frequency)是一种用于信息搜索和信息挖掘的常用加权技术。在搜索、文献分类和其他相关领域有广泛的应用。TF-

Public @ 2016-02-22 16:12:36

更多您感兴趣的搜索

0.486589s