利用c#提取文本关键词.docx

上传人:牧羊曲112 文档编号:3087699 上传时间:2023-03-10 格式:DOCX 页数:9 大小:40.43KB
返回 下载 相关 举报
利用c#提取文本关键词.docx_第1页
第1页 / 共9页
利用c#提取文本关键词.docx_第2页
第2页 / 共9页
利用c#提取文本关键词.docx_第3页
第3页 / 共9页
利用c#提取文本关键词.docx_第4页
第4页 / 共9页
利用c#提取文本关键词.docx_第5页
第5页 / 共9页
亲,该文档总共9页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《利用c#提取文本关键词.docx》由会员分享,可在线阅读,更多相关《利用c#提取文本关键词.docx(9页珍藏版)》请在三一办公上搜索。

1、利用c#提取文本关键词1. 2. 原理:1、先给本聚类内的所有文档进行分词,然后用一个字典保存每个词出现的次数 3. 2、遍历每个词,得到每个词在所有文档里的IDF值,和在本聚类内出现的次数相乘的值 4. 3、用一个字典(key是词,value是TF*IDF权重)来保存所有的词信息,然后按value对字典排序,最后取权重排名靠前的几个词作为关键词测试输入如下 5. = 6. a 奥运 拳击 入场券 基本 分罄 邹市明 夺冠 对手 浮出 水面 7. a 股民 要 清楚 自己 的 目的 8. a 印花税 之 股民 四季 9. a ASP.NET 自定义 控件 复杂 属性 声明 持久性 浅析 10.

2、 a 运动员 行李 将 “后 上 先 下” 奥运 相关 人员 行李 实名制 11. a 控件 开发 显示 控件 内容 12. a 奥运 票务 网上 成功 订票 后 应 及时 到 银行 代售 网点 付款 13. a 某 心理 健康 站 开张 后 首 个 咨询 者 是 位 新 股民 14. a 残疾 女 青年 入围 奥运 游泳 比赛 创 奥运 历史 两 项 第一 15. a 介绍 一 个 ASP.net MVC 系列 教程 16. a 在 中 实现 观察者 模式 ,或 有 更 好 的 方法 17. a 输 大钱 的 股民 给 我们 启迪 18. a Asp.Net 页面 执行 流程 分析 19.

3、a 杭州 股民 放 鞭炮 庆祝 印花税 下调 20. = 21. 数据还是昨天的数据,但每个文章前面都加了个a,所以这个词的IDF肯定很低,如果单村用词频来提取关键词,这个a肯定被当场关键词了,所以要乘以IDF值来调整特征提取的精度。我们要用程序把上面的文档分成3类,并提取每个类的两个关键词 22. 我给TFIDFMeasure类加了一个GetKeyword的方法,第一个参数是传入几个文档id列表,第二个参数是要在这几个文档里提取几个关键词,下面是使用该方法的代码 23. 24. /4、初始化k-means算法,第一个参数表示输入数据,第二个参数表示要聚成几个类 25. WawaKMeans

4、kmeans = new WawaKMeans(data, K); 26. /5、开始迭代 27. kmeans.Start; 28. 29. /6、获取聚类结果并输出 30. WawaCluster clusters = kmeans.Clusters; 31. StringBuilder sb = new StringBuilder; 32. foreach (WawaCluster cluster in clusters) 33. 34. List members = cluster.CurrentMembership; 35. 36. /获取该聚类的关键词并打印 37. IEnumer

5、able keywords = tf.GetKeyword(cluster.CurrentMembership, 2); 38. StringBuilder sbTemp = new StringBuilder; 39. sbTemp.Append(-); 40. foreach (string s in keywords) 41. 42. sbTemp.AppendFormat(0, s); 43. 44. sbTemp.Append(-/r/n); 45. Console.WriteLine(sbTemp); 46. 47. /打印该聚类的成员 48. sb.Append(sbTemp.T

6、oString); 49. foreach (int i in members) 50. 51. Console.WriteLine(docs); 52. sb.AppendFormat(0/r/n, docs); 53. 54. 55. 56. 57. 再看GetKeyword方法的实现 58. / 59. / 获取某组文档的关键词 60. / 61. / 62. / 63. / 64. public IEnumerable GetKeyword(List arr, int count) 65. 66. /1、给每个文档分词并保存在一个列表里 67. List allWords = new

7、List; 68. foreach (int i in arr) 69. 70. /这里把一个文档里出现的多个词进行消重 71. allWords.AddRange(GetDistinctWords(_tokenizer.Partition(_docs); 72. 73. 74. /2、用一个字典保存词的词频,key是词,value是重复次数 75. Dictionary tfDict = SortByDuplicateCount(allWords); 76. 77. /3、遍历已排序的词频字典,并获取每个词的IDF值,并把更新后的结果放入一个tfidfDict词典 78. /该词典的key是

8、词,value是tfidf值 79. Dictionary tfidfDict = new Dictionary(tfDict.Count); 80. foreach (KeyValuePair pair in tfDict) 81. 82. int tremIndex; 83. if(_tremIndex.TryGetValue(pair.Key,out tremIndex) 84. 85. float idf = GetInverseDocumentFrequency(tremIndex); 86. tfidfDict.Add(pair.Key, pair.Value * idf); 87

9、. 88. 89. 90. /4、给tfidf字典俺权重排序 91. tfidfDict = GetSortByValueDict(tfidfDict); 92. 93. /5、更新要提取的关键词数量 94. int keywordCount = count; 95. if (keywordCount tfidfDict.Count) 96. keywordCount = tfidfDict.Count; 97. 98. /6、用一个数组保存tfidf字典的keys,这些key已排序 99. string keywordArr = new stringtfidfDict.Count; 100.

10、 tfidfDict.Keys.CopyTo(keywordArr,0); 101. 102. /7、在关键词数组里取出前几个关键词返回给调用者 103. List result = new List(keywordCount); 104. int tempCount = 0; 105. foreach (string str in keywordArr) 106. 107. tempCount+; 108. result.Add(str); 109. if(tempCount =keywordCount) break; 110. 111. return result; 112. 113. 1

11、14. 115. 116. 117. 这里面用到一个SortByDuplicateCount方法,是对一个集合里的元素按重复次数排序,输出一个字典,字典的key是原始元素,value是出现次数,并按出现次数从大到小排序,像 abcd, ab, b, a, abcd, ab, ab, ab, cd, cd, cd 这样一个集合应该输入如下结果。 118. ab-4 119. cd-3 120. abcd-2 121. b-1 122. a-1 123. 原理是先用一个字典计算每个元素的出现次数,然后把该字典按value的大小排序,下面是实现代码 124. / 125. / 把一个集合按重复次数排

12、序 126. / 127. / 128. / 129. / 130. public static Dictionary SortByDuplicateCount(IList inputList) 131. 132. /用于计算每个元素出现的次数,key是元素,value是出现次数 133. Dictionary distinctDict = new Dictionary; 134. for (int i = 0; i inputList.Count; i+) 135. 136. /这里没用trygetvalue,会计算两次hash 137. if (distinctDict.ContainsK

13、ey(inputList) 138. distinctDictinputList+; 139. else 140. distinctDict.Add(inputList, 1); 141. 142. 143. Dictionary sortByValueDict = GetSortByValueDict(distinctDict); 144. return sortByValueDict; 145. 146. 147. 148. 149. 150. 这里用到一个把一个字典按值的大小排序的方法GetSortByValueDict,代码如下,是泛型的 151. / 152. / 把一个字典俺val

14、ue的顺序排序 153. / 154. / 155. / 156. / 157. / 158. public static Dictionary GetSortByValueDict(IDictionary distinctDict) 159. 160. /用于给tempDict.Values排序的临时数组 161. V tempSortList = new VdistinctDict.Count; 162. distinctDict.Values.CopyTo(tempSortList, 0); 163. Array.Sort(tempSortList); /给数据排序 164. Array

15、.Reverse(tempSortList);/反转 165. 166. /用于保存按value排序的字典 167. Dictionary sortByValueDict = 168. new Dictionary(distinctDict.Count); 169. for (int i = 0; i tempSortList.Length; i+) 170. 171. foreach (KeyValuePair pair in distinctDict) 172. 173. /比较两个泛型是否相当要用Equals,不能用=操作符 174. if (pair.Value.Equals(temp

16、SortList) & !sortByValueDict.ContainsKey(pair.Key) 175. sortByValueDict.Add(pair.Key, pair.Value); 176. 177. 178. return sortByValueDict; 179. 180. 181. 182. 183. 184. 对一个文章内出现的多个词进行消重是因为如果一个文章里堆叠关键词会影响本聚类关键词提取的准确性,所以要排重,算法如下,也是泛型的 185. / 186. / 对一个数组进行排重 187. / 188. / 189. / 190. public static IEnu

17、merable GetDistinctWords(IEnumerable scanKeys) 191. 192. T temp = default(T); 193. if (scanKeys.Equals(temp) 194. return new T0; 195. else 196. 197. Dictionary fixKeys = new Dictionary; 198. foreach (T key in scanKeys) 199. 200. fixKeyskey = key; 201. 202. T result = new TfixKeys.Count; 203. fixKeys

18、.Values.CopyTo(result, 0); 204. return result; 205. 206. 207. 208. 最后效果如下 209. Iteration 0. 210. Iteration 1. 211. -asp,net,- 212. a ASP.NET 自定义 控件 复杂 属性 声明 持久性 浅析 213. a 控件 开发 显示 控件 内容 214. a 介绍 一 个 ASP.net MVC 系列 教程 215. a 在 中 实现 观察者 模式 ,或 有 更 好 的 方法 216. a Asp.Net 页面 执行 流程 分析 217. -股民,印花税,- 218.

19、a 股民 要 清楚 自己 的 目的 219. a 印花税 之 股民 四季 220. a 某 心理 健康 站 开张 后 首 个 咨询 者 是 位 新 股民 221. a 输 大钱 的 股民 给 我们 启迪 222. a 杭州 股民 放 鞭炮 庆祝 印花税 下调 223. -奥运,拳击,- 224. a 奥运 拳击 入场券 基本 分罄 邹市明 夺冠 对手 浮出 水面 225. a 运动员 行李 将 “后 上 先 下” 奥运 相关 人员 行李 实名制 226. a 奥运 票务 网上 成功 订票 后 应 及时 到 银行 代售 网点 付款 227. a 残疾 女 青年 入围 奥运 游泳 比赛 创 奥运 历史 两 项 第一 228. 可以看到,提取的关键字还是准确的,并没把a当成关键字。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号