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

Posted

技术标签:

【中文标题】如何在c#中使用词典字典【英文标题】:How to use lexicon dictionary in c# 【发布时间】:2016-01-15 08:36:33 【问题描述】:

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

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

那么我怎样才能在文件中找到这个词呢?或者有没有其他方法可以让我轻松处理这个问题?

【问题讨论】:

【参考方案1】:

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

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

  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】:

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

【讨论】:

【参考方案3】:

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

您可以轻松阅读带有File.ReadAllLines 的单词(忽略以; 开头的行,那些是cmets)。

【讨论】:

以上是关于如何在c#中使用词典字典的主要内容,如果未能解决你的问题,请参考以下文章

如何在Jinja中过滤词典?

Python练习题—如何在一个表达式中合并两个词典?

如何使用 python (django) 创建英语词典应用程序?

如何导出数据库的数据词典

如何在打字稿中使用 C# 字典?

如何在 C# 中使用 LINQ 过滤嵌套字典?