2015-10-16 75 views
2

我正在c#中進行情感分析,我已經完成了預處理,並且下一部分是基於詞典的分析,爲此我找到了約6800個字的英語詞典lexicon by Professor Bing Liu,其中包含兩個文本文件,一個是積極的,另一個是消極的。如何在c#中使用詞典詞典

我在想,我必須從這些文件中找出每個單詞(情感詞),這些文字是特定的詞是積極的還是消極的。但問題是,這些文件包含沒有任何空格的單詞,沒有任何格式(意味着單個單詞無法從文件中識別)。

那麼如何找到文件中的單詞?或者還有什麼其他的方式可以讓我輕鬆地使用它?

回答

1

該文件使用\n作爲行分隔符(不像標準Windows \r\n)。 所以,只是不打開它與記事本或類似,與寫字板

將文件加載到一個集合(讓它成爲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 
1

實際上,該文件每行包含一個字,但行結束符是Unix風格而不是Windows,因此一些編輯器(如記事本)將在單行中顯示所有內容。

你可以很容易地閱讀與File.ReadAllLines(忽略;,這些都是評論)的行。

1

的文件不包含由換行符(\n)界定的話,那麼最簡單的方法是與r使用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允許您查詢內容,您不需要字典。