Giter Site home page Giter Site logo

jieba.net's Introduction

jieba.NET是jieba中文分词的.NET版本(C#实现)。

当前版本为0.42.2,基于jieba 0.42,提供与jieba基本一致的功能与接口,但不支持其最新的paddle模式。关于jieba的实现思路,可以看看这篇wiki里提到的资料。

此外,也提供了 KeywordProcessor,参考 FlashText 实现。KeywordProcessor 可以更灵活地从文本中提取词典中的关键词,比如忽略大小写、含空格的词等。

如果您在开发中遇到与分词有关的需求或困难,请提交一个Issue,I see u:)

特点

  • 支持三种分词模式:
    • 精确模式,试图将句子最精确地切开,适合文本分析
    • 全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义。具体来说,分词过程不会借助于词频查找最大概率路径,亦不会使用HMM;
    • 搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词
  • 支持繁体分词
  • 支持添加自定义词典和自定义词
  • MIT 授权协议

算法

  • 基于前缀词典实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图 (DAG)
  • 采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合
  • 对于未登录词,采用了基于汉字成词能力的HMM模型,使用了Viterbi算法

安装和配置

当前版本支持net40、net45和netstandard2.0,可以手动引用项目,也可以通过NuGet添加引用:

PM> Install-Package jieba.NET

安装之后,在packages\jieba.NET目录下可以看到Resources目录,这里面是jieba.NET运行所需的词典及其它数据文件,最简单的配置方法是将整个Resources目录拷贝到程序集所在目录,这样jieba.NET会使用内置的默认配置值。如果希望将这些文件放在其它位置,则要在app.config或web.config中添加如下的配置项:

<appSettings>
    <add key="JiebaConfigFileDir" value="C:\jiebanet\config" />
</appSettings>

需要注意的是,这个路径可以使用绝对路径或相对路径。如果使用相对路径,那么jieba.NET会假设该路径是相对于当前应用程序域的BaseDirectory

配置示例:

  • 采用绝对路径时,比如配置项为C:\jiebanet\config,那么主词典的路径会拼接为:C:\jiebanet\config\dict.txt。
  • 采用相对路径时(或未添加任何配置项,那么将会使用默认的相对路径:Resources),比如配置项为..\config(可通过..来调整相对路径),若当前应用程序域的BaseDirectory是C:\myapp\bin\,那么主词典的路径会拼接为:C:\myapp\config\dict.txt。

使用代码配置词典路径

如果因为某些原因,不方便通过应用的 config 文件配置,可使用代码设置(在使用任何分词功能之前,建议使用绝对路径),如:

JiebaNet.Segmenter.ConfigManager.ConfigFileBaseDir = @"C:\jiebanet\config";

主要功能

1. 分词

  • JiebaSegmenter.Cut方法接受三个输入参数,text为待分词的字符串;cutAll指定是否采用全模式;hmm指定使用是否使用hmm模型切分未登录词;返回类型为IEnumerable<string>
  • JiebaSegmenter.CutForSearch方法接受两个输入参数,text为待分词的字符串;hmm指定使用是否使用hmm模型;返回类型为IEnumerable<string>

代码示例

var segmenter = new JiebaSegmenter();
var segments = segmenter.Cut("我来到北京清华大学", cutAll: true);
Console.WriteLine("【全模式】:{0}", string.Join("/ ", segments));

segments = segmenter.Cut("我来到北京清华大学");  // 默认为精确模式
Console.WriteLine("【精确模式】:{0}", string.Join("/ ", segments));

segments = segmenter.Cut("他来到了网易杭研大厦");  // 默认为精确模式,同时也使用HMM模型
Console.WriteLine("【新词识别】:{0}", string.Join("/ ", segments));

segments = segmenter.CutForSearch("小明硕士毕业于**科学院计算所,后在日本京都大学深造"); // 搜索引擎模式
Console.WriteLine("【搜索引擎模式】:{0}", string.Join("/ ", segments));

segments = segmenter.Cut("结过婚的和尚未结过婚的");
Console.WriteLine("【歧义消除】:{0}", string.Join("/ ", segments));

输出

【全模式】:我/ 来到/ 北京/ 清华/ 清华大学/ 华大/ 大学
【精确模式】:我/ 来到/ 北京/ 清华大学
【新词识别】:他/ 来到/ 了/ 网易/ 杭研/ 大厦
【搜索引擎模式】:小明/ 硕士/ 毕业/ 于/ **/ 科学/ 学院/ 科学院/ **科学院/ 计算/ 计算所/ ,/ 后/ 在/ 日本/ 京都/ 大学/ 日本京都大学/ 深造
【歧义消除】:结过婚/ 的/ 和/ 尚未/ 结过婚/ 的

2. 添加自定义词典

加载词典

  • 开发者可以指定自定义的词典,以便包含jieba词库里没有的词。虽然jieba有新词识别能力,但是自行添加新词可以保证更高的正确率
  • JiebaSegmenter.LoadUserDict("user_dict_file_path")
  • 词典格式与主词典格式相同,即一行包含:词、词频(可省略)、词性(可省略),用空格隔开
  • 词频省略时,分词器将使用自动计算出的词频保证该词被分出

创新办 3 i
云计算 5
凱特琳 nz
台中
机器学习 3

调整词典

  • 使用JiebaSegmenter.AddWord(word, freq=0, tag=null)可添加一个新词,或调整已知词的词频;若freq不是正整数,则使用自动计算出的词频,计算出的词频可保证该词被分出来
  • 使用JiebaSegmenter.DeleteWord(word)可移除一个词,使其不能被分出来

3. 关键词提取

基于TF-IDF算法的关键词提取

  • JiebaNet.Analyser.TfidfExtractor.ExtractTags(string text, int count = 20, IEnumerable<string> allowPos = null)可从指定文本中抽取出关键词。
  • JiebaNet.Analyser.TfidfExtractor.ExtractTagsWithWeight(string text, int count = 20, IEnumerable<string> allowPos = null)可从指定文本中抽取关键词的同时得到其权重
  • 关键词抽取基于逆向文件频率(IDF),组件内置一个IDF语料库,可以配置为其它自定义的语料库。
  • 关键词抽取会过滤停用词(Stop Words),组件内置一个停用词语料库,这个语料库合并了NLTK的英文停用词和哈工大的中文停用词。

基于TextRank算法的关键词抽取

  • JiebaNet.Analyser.TextRankExtractorTfidfExtractor相同的接口。需要注意的是,TextRankExtractor默认情况下只提取名词和动词。
  • 以固定窗口大小(默认为5,通过Span属性调整)和词之间的共现关系构建图

4. 词性标注

  • JiebaNet.Segmenter.PosSeg.PosSegmenter类可以在分词的同时,为每个词添加词性标注。
  • 词性标注采用和ictclas兼容的标记法,关于ictclas和jieba中使用的标记法列表,请参考:词性标记
var posSeg = new PosSegmenter();
var s = "一团硕大无朋的高能离子云,在遥远而神秘的太空中迅疾地飘移";

var tokens = posSeg.Cut(s);
Console.WriteLine(string.Join(" ", tokens.Select(token => string.Format("{0}/{1}", token.Word, token.Flag))));
一团/m 硕大无朋/i 的/uj 高能/n 离子/n 云/ns ,/x 在/p 遥远/a 而/c 神秘/a 的/uj 太空/n 中/f 迅疾/z 地/uv 飘移/v

5. Tokenize:返回词语在原文的起止位置

  • 默认模式
var segmenter = new JiebaSegmenter();
var s = "永和服装饰品有限公司";
var tokens = segmenter.Tokenize(s);
foreach (var token in tokens)
{
    Console.WriteLine("word {0,-12} start: {1,-3} end: {2,-3}", token.Word, token.StartIndex, token.EndIndex);
}
word 永和           start: 0   end: 2
word 服装           start: 2   end: 4
word 饰品           start: 4   end: 6
word 有限公司         start: 6   end: 10
  • 搜索模式
var segmenter = new JiebaSegmenter();
var s = "永和服装饰品有限公司";
var tokens = segmenter.Tokenize(s, TokenizerMode.Search);
foreach (var token in tokens)
{
    Console.WriteLine("word {0,-12} start: {1,-3} end: {2,-3}", token.Word, token.StartIndex, token.EndIndex);
}
word 永和           start: 0   end: 2
word 服装           start: 2   end: 4
word 饰品           start: 4   end: 6
word 有限           start: 6   end: 8
word 公司           start: 8   end: 10
word 有限公司         start: 6   end: 10

6. 并行分词

使用如下方法:

  • JiebaSegmenter.CutInParallel()JiebaSegmenter.CutForSearchInParallel()
  • PosSegmenter.CutInParallel()

7. 与Lucene.NET的集成

jiebaForLuceneNet项目提供了与Lucene.NET的简单集成,更多信息请看:jiebaForLuceneNet

8. 其它词典

jieba分词亦提供了其它的词典文件:

9. 分词速度

  • 全模式:2.5 MB/s
  • 精确模式:1.1 MB/s
  • 测试环境: Intel(R) Core(TM) i3-2120 CPU @ 3.30GHz;围城.txt(734KB)

10. 命令行分词

Segmenter.Cli项目build之后得到jiebanet.ext,它的选项和实例用法如下:

-f       --file          the file name, (必要的).
-d       --delimiter     the delimiter between tokens, default: / .
-a       --cut-all       use cut_all mode.
-n       --no-hmm        don't use HMM.
-p       --pos           enable POS tagging.
-v       --version       show version info.
-h       --help          show help details.

sample usages:
$ jiebanet -f input.txt > output.txt
$ jiebanet -d | -f input.txt > output.txt
$ jiebanet -p -f input.txt > output.txt

11. 词频统计

可以使用Counter类统计词频,其实现来自Python标准库的Counter类(具体接口和实现细节略有不同),用法大致是:

var s = "在数学和计算机科学之中,算法(algorithm)为任何良定义的具体计算步骤的一个序列,常用于计算、数据处理和自动推理。精确而言,算法是一个表示为有限长列表的有效方法。算法应包含清晰定义的指令用于计算函数。";
var seg = new JiebaSegmenter();
var freqs = new Counter<string>(seg.Cut(s));
foreach (var pair in freqs.MostCommon(5))
{
    Console.WriteLine($"{pair.Key}: {pair.Value}");
}

输出:

的: 4
,: 3
算法: 3
计算: 3
。: 3

Counter类可通过AddSubtractUnion方法进行修改,最后以MostCommon方法获得频率最高的若干词。具体用法可见测试用例。

12. KeywordProcessor

可通过 KeywordProcessor 提取文本中的关键词,不过它的提取与 KeywordExtractor不同。KeywordProcessor 可理解为基于词典从文本中找出已知的词,仅仅如此。

jieba分词当前的实现里,不能处理忽略大小写、含空格的词之类的情况,而在文本提取应用中,这是很常见的场景。因此 KeywordProcessor 主要是作为提取之用,而非分词,尽管通过其中的方法,可以实现另一种基于字典的分词模式。

代码示例:

var kp = new KeywordProcessor();
kp.AddKeywords(new []{".NET Core", "Java", "C语言", "字典 tree", "CET-4", "网络 编程"});

var keywords = kp.ExtractKeywords("你需要通过cet-4考试,学习c语言、.NET core、网络 编程、JavaScript,掌握字典 tree的用法");

// keywords 值为:
// new List<string> { "CET-4", "C语言", ".NET Core", "网络 编程", "字典 tree"}

// 可以看到,结果中的词与开始添加的关键词相同,与输入句子中的词则不尽相同。如果需要返回句中找到的原词,可以使用 `raw` 参数。

var keywords = kp.ExtractKeywords("你需要通过cet-4考试,学习c语言、.NET core、网络 编程、JavaScript,掌握字典 tree的用法", raw: true);

// keywords 值为:
// new List<string> { "cet-4", "c语言", ".NET core", "网络 编程", "字典 tree"}

jieba.net's People

Contributors

anderscui avatar calmzeala avatar nieg avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

jieba.net's Issues

包含空格的自定义词分词时会被分割问题

如题描述,已经看过测试项目中的代码如下。 什么时候能修复下 :)

            var seg = new JiebaSegmenter();
            seg.AddWord("Steve Jobs");
            seg.AddWord("Mac OS X");
            s = "Steve Jobs重新定义了手机";
            segments = seg.Cut(s);
            Console.WriteLine("Cut: {0}", string.Join("/ ", segments));
            segments = seg.Cut(s, cutAll: true);
            Console.WriteLine("Cut All: {0}", string.Join("/ ", segments));

            s = "我们所熟悉的一个版本是Mac OS X 10.11 EI Capitan,在2015年推出。";

            segments = seg.Cut(s);
            Console.WriteLine("Cut: {0}", string.Join("/ ", segments));
            segments = seg.Cut(s, cutAll: true);
            Console.WriteLine("Cut All: {0}", string.Join("/ ", segments));

Steve Jobs依然会被分开。

安装失败

newtonsoft.json.8.0.2这个依赖包现在装不上

Error in ASP.NET

在ASP.NET 环境下,创建以下两个提取关键词的CLASS,总是报错。
web.config 文件中已增加以下设定

JiebaNet.Analyser.TfidfExtractor tf = new TfidfExtractor();
JiebaNet.Analyser.TextRankExtractor tr = new TextRankExtractor();

“System.MissingMethodException”类型的异常在 MRAnalysis.dll 中发生,但未在用户代码中进行处理

其他信息: 找不到方法:“Void JiebaNet.Segmenter.JiebaSegmenter..ctor(Boolean)”。

请问应如何解决?

源码生成报错

我想在.net 4.0项目中使用,无奈不行,下载源码下来编译也通不过。

_20180525115913

搜索引擎模式無法使用

var cc = segmenter.CutForSearch(this.txtTest.Text); foreach (var r in cc) { Console.WriteLine(r); }
原始
小明碩士畢業於中國科學院計算所,後在日本京都大學深造
輸出為
小明 碩士 畢業 於 中國 科學院 計算 所 , 後 在 日本 京都 大學 深造

跟我看到的範例結果都不一樣
找不到是哪裡出錯?

Please specify fileaccess.read when load dict

hi,我在Azure部署的时候一直遇到这样的问题

ASP.NET is not authorized to access the requested resource “E:\sitesroot\0\Resources\dict.txt”

后来检查源码,发现问题是WordDictionary.cs第42行

var stream = new FileStream(MainDict, FileMode.Open);

我把这里修改成了如下,解决了问题。

var stream = new FileStream(MainDict, FileMode.Open, FileAccess.Read);

如果不添加FileAccess.Read,在本地运行时不会有问题;如果服务器部署IIS时,会需要修改IIS运行权限;部署到azure等云上时,修改权限非常的麻烦,建议方便的话可以修改一下。

Tokenize:返回词语在原文的起止位置有错误

anders 你好!Tokenize:返回词语在原文的起止位置(StartIndex,EndIndex)是不是有较大的问题,
例如 var s = "永和服装饰品 有限公司",就是在中文串中插入几个空格,那么分词得到的Token,"有限","公司"的StartIndex,EndIndex就不是原文的起止位置了。
再比如,英文 var s = "Issues help repositories track bugs, enhancements, and ideas. You can submit new bugs, requests, or join the discussion."
Tokenize以后,除Issues这个词,其他的token的StartIndex,EndIndex全都不是原文的起止位置了。

在与Lucene.net集成时,设置Term的Offset使用了 offsetAtt.SetOffset(token.StartIndex, token.EndIndex)
那么再使用Lucene.net Highlight做高亮显示时,使用的Term的Offset作为位置值,就是错误的,会出现高亮了其他词,而不是要搜索的这个Term。

所以,在JiebaSegmenter.cs这个程序文件中,好像不应该使用下面这样的代码(原py版本好像也是这样的),
var width = w.Length;
result.Add(new Token(w, start, start + width));
start += width;

但具体怎么做,我琢磨了源代码很长时间,也还没有解决方法,看看 Anders有没有好的方法。谢谢

关于去除停用词后进行词频统计

有幸能使用到大佬做的jieba分词。
在使用的过程遇到一个问题,就是载入停用词后,使用TfidfExtractor中的ExtractTags(txt,10)对txt进行分词,获得10个string数据是已经按词频排序好的吗?能具体获得使用停用词后分出来的各个词的词频吗?因为我和直接用segment.cut方法获得的结果用counter获得词频,然后获取Mostcommon(100)的结果进行对比,发现有几个词的先后顺序略有差异。
image
image
第一张图是用extracttags获得的结果(10个),第二张图是直接cut后统计的结果,停用词为jieba.net中附带的stopwords_zh_hit.txt文件。

“JiebaNet.Segmenter.JiebaSegmenter”的类型初始值设定项引发异常。

想请问一下 我把Resources文件夹复制到了我的项目目录下,然后在web配置文件里添加了绝对路径,但是还是报这个错误

image

设置路径 :
<appSettings> <add key="JiebaConfigFileDir" value="E:\Projects\TFS\Leading\Main\PdaSite\JiebaConfig"/> </appSettings>

请问是我哪里设置的有问题吗?

textrank allowpos 的功能

您好。
我試驗了一下textrank allowpos的功能發現沒有任何差異
進去source code 裡面看了一下
發現好沒有實作這個功能
請教一下是否是不是我誤判

感謝

TfidfExtractor.SetStopWords似乎沒有作用

您好,首先很感謝您提供的程式
我使用TfidfExtractor去截取關鍵詞時
原程式可以將stopwords.txt裡面的關鍵詞剃除掉
例如新增 "穿搭"關鍵詞,則不會出現這兩個字
但我想要動態新增關鍵詞
於是使用了 SetStopWords
例如
Dim aa = New TfidfExtractor
aa.SetStopWords("穿搭")
Dim bb = aa.ExtractTags(articleContent, FormatNumber(50))

但似乎沒有作用
程式還是會把"穿搭"兩個字當作關鍵詞列出來
這能否修改一下呢?
謝謝您

请问关键词提取如何限定仅提取某些词

您好,dict自定义后 可以根据限定的词语进行分词。
请问提取关键词时,如何仅提取某些词呢?比如 我只需要提取出 MP3,MP4,音箱 此类词语。
SetIdfPath 是否仅影响排序?尝试多次得不到想要的结果。
技术有限,源码看的不是很明白。感谢!!!

关于Jieba.net引用MVC框架时候出错的问题

我是一个新手,正在研究MVC系统框架,前几天刚刚把jieba项目启动来,今天加入MVC框架后,发现无法正常启动,系统能够正常编译,我在index视图加入如下代码
JiebaSegmenter jiebaSegmenter = new JiebaSegmenter();
jiebaSegmenter.Cut("我就试试");
能够正常编译,启动后报错信息如下:
System.IO.FileLoadException
HResult=0x80131040
Message=未能加载文件或程序集“Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=null”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)
Source=JiebaNet.Segmenter
StackTrace:
在 JiebaNet.Segmenter.FinalSeg.Viterbi.LoadModel() 在 D:\jieba.NET-master\src\Segmenter\FinalSeg\Viterbi.cs 中: 第 86 行
在 JiebaNet.Segmenter.FinalSeg.Viterbi..ctor() 在 D:\jieba.NET-master\src\Segmenter\FinalSeg\Viterbi.cs 中: 第 28 行
在 JiebaNet.Segmenter.FinalSeg.Viterbi.<>c.<.cctor>b__14_0() 在 D:\jieba.NET-master\src\Segmenter\FinalSeg\Viterbi.cs 中: 第 15 行
在 System.Lazy`1.CreateValue()

请版主帮忙看看,指点一下,谢谢!

Nuget下载安装后,Tfidf使用报错

  1. PM> Install-Package jieba.NET
  2. 复制package下resource目录到项目目录。
    3.JiebaNet.Analyser.TfidfExtractor extract = new JiebaNet.Analyser.TfidfExtractor();
    步骤三报错
    ““System.NullReferenceException”类型的异常在 JiebaNet.Analyser.dll 中发生,但未在用户代码中进行处理
    其他信息: 未将对象引用设置到对象的实例。”

环境为asp.net 4.5。 步骤二的dic目录已经确认正常。

衷心建议:说明能否写得更明确点,太多的坑啊,大神!

newstonsoft需要8以上版本,10以上可以不可以?
resource文件夹要拷贝到程序集所在目录,什么是程序集所在目录,是带resource目录一起拷贝,还是只要拷贝里面的文件?
framework要4.5,4.6.1可以不可以?
位置不正确,会报错,会报什么错?能否写出来,让我也知道我碰到的是不是文件位置问题?

别笑我低级,我也做了不短时间的开发了。理论我都懂,可是当我碰到问题2天都解决不了的时候,所有懂的东西都变得不靠谱了!!!

词典路径的进一步改进

我最近在实现一个类库,其中调用了Jieba。但是如果我想在其他工程中调用的时候,就需要在每一个工程的config文件中都设置jieba的目录。
我建议给ConfigFileBaseDir添加一个set,这样在项目中就可以动态的指定根目录了。我可以把jieba的资源文件放到整个类库的资源文件中,传一个变量就可以加载。
例如这样子:

        private static string _configFileBaseDir;
        public static string ConfigFileBaseDir
        {
            get
            {
                if (string.IsNullOrEmpty(_configFileBaseDir))
                {
                    _configFileBaseDir = ConfigurationManager.AppSettings["JiebaConfigFileDir"] ?? "Resources";
                }
                return _configFileBaseDir;
            }
            set { _configFileBaseDir = value; }
        }

对类似“艾尔肯·吐尼亚孜”切词,即使添加了自定义词典,也无法把这个人名切出来

我把这个名字“艾尔肯·吐尼亚孜”加到了词典中并且用segmenter.LoadUserDict() 加入了词典,对这句话
艾尔肯·吐尼亚孜**阿克苏人
切出来的结果是
艾尔肯/·/吐/尼亚/孜/**/阿克苏/人

但是如果名字里没有·,比如将”一个不在字典中的名字“放入字典,就可以正确切出来,请问这是什么原因,我该如何应对名字中存在·的情况?

分词功能.Cut()出错

当调用 loadUser.Cut("简历名称JAVA后端"),即:“简历名称JAVA后端”无空格的情况下,报错“loadUser.Cut("简历名称JAVA后端")”引发了类型“System.NullReferenceException”的异常;
当调用 “loadUser.Cut("简历名称JAVA 后端"),即:“简历名称JAVA[空格]后端”有空格的情况下,不报错。
说明:在vs2017下。

已经解决:使用loadUser.Cut("stringparam",true)

vs2013、4.5下报错,已经调试2天,无结果!跪求!

“System.TypeInitializationException”类型的异常在 ydcms.dll 中发生,但未在用户代码中进行处理

其他信息: “JiebaNet.Segmenter.JiebaSegmenter”的类型初始值设定项引发异常。

出错运行的语句为:
JiebaNet.Segmenter.JiebaSegmenter segmenter = new JiebaNet.Segmenter.JiebaSegmenter();

newstonsoft.json已经升级到10以上版本,无果。

关于复制到各种位置都尝试了。包括debug等等,也试了去掉文件夹直接复制一堆文件。
Resources下文件都尝试修改成 utf-8编码。

大神,帮忙啊!

System.TypeInitializationException

想請問一下,我在執行上出現了這個錯誤,可以提供一些訊息給我嗎?

執行到這一行的時候

var segments = segmenter.Cut("資訊工程學系");

出現錯誤

類型 'System.TypeInitializationException' 的未處理例外狀況發生於 JiebaNet.Segmenter.dll
其他資訊: 'JiebaNet.Segmenter.JiebaSegmenter' 的類型初始設定式發生例外狀況。

完整 code

var segmenter = new JiebaSegmenter();
var segments = segmenter.Cut("資訊工程學系");
Console.WriteLine(string.Join(" ", segments));

我同时想要词性标注和自定义词典有没办法做到的?

看到词性标注和自定义词典里用的不是同一个实例,不知道是因为.net版没有实现还是原版结巴就没有的?
var posSeg = new PosSegmenter(); var s = "一团硕大无朋的高能离子云,在遥远而神秘的太空中迅疾地飘移"; var tokens = posSeg.Cut(s); Console.WriteLine(string.Join(" ", tokens.Select(token => string.Format("{0}/{1}", token.Word, token.Flag))));

JiebaSegmenter.AddWord(word, freq=0, tag=null)

问题

var segmenter = new JiebaSegmenter();
不行好像要写成jiebanet.segmenter.jiebasegmenter

无法识别混合有符号、字母、汉字的词?

在处理医学病历,“该患者窦性心律不齐,心电图示短P-R间期”,已经向自定义词典中添加了“窦性心律不齐”和“短P-R间期”,遗憾的是“短P-R间期”无法正确识别,被拆成了“短/P/-/R/区间”。

自定义词不起作用?

        var segmenter = new JiebaSegmenter();
        segmenter.LoadUserDict(JIEBA_STOCK_DIC_FN);
        var segments = segmenter.Cut("国办:促进仿制药研发减按15%的税率征收企业所得税 景峰医药封涨停");

其中 "仿制药" "景峰医药" 我在上面的JIEBA_STOCK_DIC_FN文件中已经定义了,但上面分词 还是把"仿制药"" 分成了 "仿制"和"药" ,把"景峰医药" 分成了"景峰","医药" 两个词, 请问要如何处理?

  另外例子中的精确模式和新词识别 看不出有啥区别,是笔误吗?

自定义词典下的posSeg.Cut("北京市海淀区",true);结果不正确

JiebaNet.Segmenter.WordDictionary.Instance.DeleteWord("北京");
JiebaNet.Segmenter.WordDictionary.Instance.DeleteWord("北京市");
JiebaNet.Segmenter.WordDictionary.Instance.DeleteWord("海淀区");

        JiebaNet.Segmenter.WordDictionary.Instance.AddWord("北京", 6000, "city");
        JiebaNet.Segmenter.WordDictionary.Instance.AddWord("北京市", 6000, "city");
        JiebaNet.Segmenter.WordDictionary.Instance.AddWord("海淀区", 6000, "town");
        //seg.LoadUserDict(AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "userdict.txt");
        JiebaNet.Segmenter.WordDictionary.Instance.ContainsWord("北京");
        JiebaNet.Segmenter.WordDictionary.Instance.ContainsWord("北京市");
        var tokens = posSeg.Cut("北京市海淀区",true);

按道理说cut之后得到的结果应该是
北京市 city
海淀区 town
但实际得到的结果是
北京市 ns
海淀区 ns

我想咨询一下 中文分词有关问题

我用的是 jieba.NET 版本,我现在遇到一个问题
比如 我想搜索的关键字为:糖尿病药 、糖尿病药品
如果使用自带词库
糖尿病药分词结果: 糖尿/糖尿病/药
糖尿病药品分词结果:糖尿/糖尿病/药品

因为现在我做的是药品类电商搜索,这时候会遇到一个问题,如果把药、药品这两个字分出来,这样匹配的结果会相当不准确(因为在生成索引的时候,药品在多个域中含有)

还有一个问题 想咨询一下 就是在结巴分词词库中 哪个词频 我还是没搞清楚具体作用(十分抱歉我是新手)

TfidfExtractor和TextRankExtractor创建报错。

所有东西都是按照你的配置来的。应该是没配置错,其他地方都好使。
但是在创建TextRankExtractor和TfidfExtractor的时候就报错,提示:未将对象引用设置到对象的实例。
版本是0.38.3,NuGet上面下载的。
求帮助啊~~~
var extractor = new TextRankExtractor();
就只这一句。

載入自訂義辭典?

請問要如何正確載入自訂義辭典?
我使用
segmenter.LoadUserDict("user_dict.txt");
segmenter.LoadUserDict(".//jieba.NET//ExtraDicts//user_dict.txt");
這兩種都不行

另請教有方法可以判斷詞是因為自訂義辭典而被切割出來的嗎?
感謝

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.