如何在c#中使用lexicon字典

How to use lexicon dictionary in c#

我正在用 C# 进行情感分析,我已经完成了预处理,接下来是基于词典的分析,为此我找到了大约 6800 个单词的英语词典 lexicon by Professor Bing Liu ,其中包含两个文本文件,一个是正​​面的,另一个是负面的。

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

那么如何在文件中找到这个词呢?或者有没有其他方法可以让我轻松地使用它?

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

File.ReadAllLines的字你可以轻松读懂(忽略以;开头的行,那是评论)。

该文件使用 \n 作为行分隔符(与标准 Windows \r\n 不同)。 所以,不要用 NotePad 或类似工具打开它,用 WordPad.

将文件加载到集合中(让它成为 HashSet<String> - 你可能想要测试一个词是否 在肯定词 内) ,您可以使用 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

该文件似乎包含由换行符 (\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中,可以查询内容,不需要字典。