C#最大逆向分词
来源:互联网 发布:吸附平衡浓度算法 编辑:程序博客网 时间:2024/05/17 06:55
C#中有丰富的类库,在汉字的处理问题上有较大的优势。
这次使用的是最大逆向分词,与昨天的正向分词,大同小异。点击打开链接
完整代码
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.IO;using System.Data;using System.Data.OleDb;using System.Data.Odbc;using System.Data.SqlClient;using System.Data.SqlTypes;using System.Collections;namespace 最大逆向分词{ class Program { static void Main(string[] args) { string text = ""; string path="E:\\data\\yuanwen.txt"; FileStream fs = File.OpenRead(path); StreamReader sr = new StreamReader(fs, Encoding.Default); text = text + sr.ReadLine(); Console.WriteLine(text); sr.Close(); fs.Close();//读取文本结束,以上 char[] words = text.ToCharArray();//将文本放进数组 int wholelen = words.Length; Console.WriteLine(wholelen);//数组的总长度为231,实际227字,说明空格被计入。 string mystr;//用来分词 OleDbConnection myconn = new OleDbConnection(); OleDbCommand mycmd = new OleDbCommand(); mystr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=words.mdb"; myconn.ConnectionString = mystr; myconn.Open(); mycmd.Connection = myconn; if (myconn.State == ConnectionState.Open) Console.WriteLine("已成功连入数据库"); else Console.WriteLine("未成功连入数据库");//连入数据库,以上 string cutword = null,mysql,output=" "; int front = wholelen - 8, rear = wholelen, cutlen = 8,i=0; while(front>0) { while(front!=rear) { cutword = null; for(i=front;i<rear;i++) cutword+=words[i]; mysql = "SELECT word FROM words WHERE word='" + cutword + "'"; mycmd.CommandText = mysql; if (mycmd.ExecuteScalar() != null) { break;//匹配成功,跳出减字的循环 } front++;//匹配不成功,则继续减字 } output = output.Insert(0, cutword + "/"); rear -= cutword.Length; front = rear - 8; } int n; cutword = null; while(rear>0) { while(rear!=front) { cutword = null; for (n = front; n < rear; n++) cutword += words[n]; mysql = "SELECT word FROM words WHERE word='" + cutword + "'"; mycmd.CommandText = mysql; if (mycmd.ExecuteScalar() != null) { break;//匹配成功,跳出减字的循环 } front++;//匹配不成功,则继续减字 } output = output.Insert(0, cutword + "/"); rear -= cutword.Length; front = 1; } Console.WriteLine(output); } }}输出
与正向分词的相同点:
①连入txt,access方法一样
②待切字段仍然用front,rear来标记
不同点:
①最开始rear标记的文章尾字,front标记的是rear前的第八个字。第一个切的字段为:“社会而努力奋斗。”与数据库匹配,不成功,front++,cutword变成“会而努力奋斗。”
继续匹配,不成功,再front++;直至切除一个词,或者cutword只剩一个字,这时候便要切下来。注意,这里使用了insert方法,来保证输出时不会是相反的文章顺序。
错误示范:/。/努力奋斗/而/小康社会/建成/全面/
这里的insert方法避免了上述现象的产生。
0 0
- C#最大逆向分词
- 逆向最大匹配分词算法
- 中文分词--逆向最大匹配
- 中文分词--逆向最大匹配
- 逆向最大匹配分词RMM
- python正向最大匹配分词和逆向最大匹配分词
- C#写中文基于词表的最大逆向匹配分词算法
- 中文分词中的正向最大匹配与逆向最大匹配
- 自己动手写分词引擎——逆向最大、正向最大、双向最大分词算法的实现
- 逆向分词
- 试着写 搜索算法-- 最大逆向匹配分词算法
- 中文分词算法之最大逆向匹配法
- 用正向和逆向最大匹配算法进行中文分词
- Java实现逆向最大匹配中文分词算法
- Python实现中文最大逆向匹配分词算法
- python实现机械分词(2)-逆向最大匹配算法
- 使用最大逆向法,利用python进行简易中文分词
- NLP——分词之正向(逆向、双向)最大
- 万海智能自助建站系统让企业网站建设低成本高效率
- 在VS中向命令行添加参数的方法
- matlab 扩大虚拟内存
- LeetCode Merge Two Sorted Lists
- Emacs ibuffer小结
- C#最大逆向分词
- 推荐几本软件测试方面的经典书籍
- samba
- iOS调用短信 邮箱分享
- 【图像处理】K-means聚类算法
- IOS Table中Cell的重用reuse机制分析
- pdflatex 笔记+资源 汇总(update everytime I meet and solve a problem)
- Android中的对话框AlertDialog使用技巧合集
- 台北公共自行车预测