如何在c#中使用词典词典

时间:2015-10-16 14:33:46

标签: c# dictionary nlp text-mining sentiment-analysis

我正在研究c#中的情感分析,我已经完成了预处理,下一部分是基于词典的分析,为此我找到了大约6800字lexicon by Professor Bing Liu 的英语词典,其中包含两个文本文件,一个用于积极的和其他的是消极的。

我想我必须从这些文件中找到每个单词(情感词),要么是特定的单词是正面的还是负面的。但问题是,这些文件包含没有任何空格的单词,没有任何格式(意味着单个单词无法从文件中识别)。

那么如何在文件中找到该单词?或者还有其他方法可以让我轻松地使用它吗?

3 个答案:

答案 0 :(得分:1)

实际上,该文件每行包含一个单词,但行结尾是Unix样式而不是Windows,因此一些编辑器(如记事本)将在一行上显示所有内容。

您可以使用File.ReadAllLines轻松阅读这些字词(忽略以;开头的行,这些是注释)。

答案 1 :(得分:1)

该文件使用\n作为行分隔符(与标准Windows \r\n不同)。 所以,不要用 NotePad 或类似的方式打开它,用写字板来做。

要将文件加载到一个集合中(让它为HashSet<String> - 您可能想要测试一个单词是否在中是),您可以使用< EM> LINQ的

  HashSet<String> positives = new HashSet<String>(File
    .ReadLines(@"C:\positive-words.txt")
    .Where(item => !String.isNullOrEmpty(item) && !item.StartsWith(";")));

  ....

  String testWord = ...

  if (positives.Contains(testWord)) {
    ...
  }

实际文件的内容为

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 
; Opinion Lexicon: Positive
...
;       frequently in social media content. 
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

a+
abound
abounds
abundance
...
zenith
zest
zippy

答案 2 :(得分:1)

该文件似乎包含换行符(\n)分隔的单词,因此最简单的方法是使用File.ReadAllLines读取文件。

var fileContents = File.ReadAllLines("negative-words.txt");
var words = new HashSet<string>(fileContents.SkipWhile(x => x.StartsWith(";") || x == String.Empty));

var containsWord = words.Contains("2-faced"); // The first valid word...

将内容放入HashSet可以查询内容,不需要字典。