2017-08-24 30 views
0

Ken BenoitとPaul Nultyによるquantedaパッケージを使用してテキストデータを扱います。Quanteda Corpusesを使用して名詞を識別する

私のコーパスには完全なドイツ語の文章が含まれており、すべてのテキストの名詞のみで作業したいと考えています。ドイツ語の1つのトリックは、大文字の単語だけを使用することですが、これは文頭に失敗します。この最小限の例から

Text1 <- c("Halle an der Saale ist die grünste Stadt Deutschlands") 
Text2 <- c("In Hamburg regnet es immer, das ist also so wie in London.") 
Text3 <- c("James Bond trinkt am liebsten Martini") 

myCorpus <- corpus(c(Text1, Text2, Text3)) 
metadoc(myCorpus, "language") <- "german" 
summary(myCorpus, showmeta = T) 

myDfm <- dfm(myCorpus, tolower = F, remove_numbers = T, 
       remove = stopwords("german"), remove_punct = TRUE, 
        remove_separators = T) 

topfeatures(myDfm, 20) 

、私が取得したいと思います: 「ハレ」、「サーレ」は、「シュタット」、「ドイツ」、「ハンバーグ」、「ロンドン」、「マティーニ」、「ジェームズ」 、 "ボンド"。

私は動詞/名詞/等を定義する辞書が必要と仮定します。適切な名前(James Bond、Hamburgなど)、または機能/辞書のビルドがあるかどうかを確認します。

ボーナス質問:ソリューションは英語のテキストでも機能しますか?

答えて

1

品詞タグャーの助けが必要です。幸いなことに、ドイツ語モデルのspaCyという形式の素晴らしいパッケージと、それをラッパーとして書いたパッケージspacyrがあります。インストール手順はspacyr pageです。

このコードは、あなたがやりたいことになります。ここでは

txt <- c("Halle an der Saale ist die grünste Stadt Deutschlands", 
     "In Hamburg regnet es immer, das ist also so wie in London.", 
     "James Bond trinkt am liebsten Martini") 

library("spacyr") 
spacy_initialize(model = "de") 
txtparsed <- spacy_parse(txt, tag = TRUE, pos = TRUE) 

head(txtparsed, 20) 
# doc_id sentence_id token_id  token  lemma pos tag entity 
# 1 text1   1  1  Halle  halle PROPN NE LOC_B 
# 2 text1   1  1   an   an ADP APPR LOC_I 
# 3 text1   1  1   der   der DET ART LOC_I 
# 4 text1   1  1  Saale  saale PROPN NE LOC_I 
# 5 text1   1  1   ist   ist AUX VAFIN  
# 6 text1   1  1   die   die DET ART  
# 7 text1   1  1  grünste  grünste ADJ ADJA  
# 8 text1   1  1  Stadt  stadt NOUN NN  
# 9 text1   1  1 Deutschlands deutschlands PROPN NE LOC_B 
# 10 text2   1  1   In   in ADP APPR  
# 11 text2   1  1  Hamburg  hamburg PROPN NE LOC_B 
# 12 text2   1  1  regnet  regnet VERB VVFIN  
# 13 text2   1  1   es   es PRON PPER  
# 14 text2   1  1  immer  immer ADV ADV  
# 15 text2   1  1   ,   , PUNCT $,  
# 16 text2   1  1   das   das PRON PDS  
# 17 text2   1  1   ist   ist AUX VAFIN  
# 18 text2   1  1   also   also ADV ADV  
# 19 text2   1  1   so   so ADV ADV  
# 20 text2   1  1   wie   wie CONJ KOKOM  

(nouns <- with(txtparsed, subset(token, pos == "NOUN"))) 
# [1] "Stadt" 
(propernouns <- with(txtparsed, subset(token, pos == "PROPN"))) 
# [1] "Halle"  "Saale"  "Deutschlands" "Hamburg"  "London"  
# [6] "James"  "Bond"   "Martini" 

は、あなたが望んでいた名詞は「固有名詞」として単純posフィールドにマークされていることがわかります。 tagフィールドは、より詳細に選択できるドイツ語のタグセットです。

library("quanteda") 
myDfm <- dfm(txt, tolower = FALSE, remove_numbers = TRUE, 
      remove = stopwords("german"), remove_punct = TRUE) 

head(myDfm) 
# Document-feature matrix of: 3 documents, 14 features (66.7% sparse). 
# (showing first 3 documents and first 6 features) 
#  features 
# docs Halle Saale grünste Stadt Deutschlands Hamburg 
# text1  1  1  1  1   1  0 
# text2  0  0  0  0   0  1 
# text3  0  0  0  0   0  0 

head(dfm_select(myDfm, pattern = propernouns)) 
# Document-feature matrix of: 3 documents, 8 features (66.7% sparse). 
# (showing first 3 documents and first 6 features) 
#  features 
# docs Halle Saale Deutschlands Hamburg London James 
# text1  1  1   1  0  0  0 
# text2  0  0   0  1  1  0 
# text3  0  0   0  0  0  1 
+1

信じられないほどの、おかげでたくさんケン:選択した名詞の

リストは、quantedaで使用することができます! – CFM

関連する問題