2017-05-18 177 views
0

我正在尋找一種方法來爲我在R中的列表中的單個詞/標記創建POS標記。我知道,如果我爲單個標記執行此操作,準確性會降低而不是句子,但我擁有的數據是來自維基百科的「刪除編輯」,人們大多刪除單個不連接的單詞而不是整個句子。我幾次看到這個問題的Python,但我還沒有找到它在R的解決方案。在R中爲單個單詞/標記創建POS標記

我的數據看起來somehwat這樣

Tokens <- list(c("1976","green","Normandy","coast","[", "[", "template" "]","]","Fish","visting","England","?")) 

理想情況下,我想有這樣的事情返回:

1976     CD 
green     JJ 
Normandy    NN 
coast     NN 
[      x 
[      x 
template    NN 
]      x 
]      x 
Fish     NN 
visiting    VBG 
England    NN 
?      x 

我發現了一些websites這樣做在線,但我懷疑他們在R中運行任何東西。他們還特別聲明不要在單個單詞/令牌上使用它。

因此我的問題:是否有可能以合理的精度在R中做到這一點?代碼如何看起來不包含句子結構?將列表與一個大型標籤日記進行比較會更容易嗎?

+0

以上答案僅適用於spacy 1.0 您必須閱讀spacy 2.0文檔以獲取新方法。 –

回答

2

一般來說,本地R中沒有像樣的後置標記器,所有可能的解決方案都依賴於外部庫。作爲這樣的解決方案之一,您可以在後端嘗試我們的包spacyr,使用spaCy。它不在CRAN上,但很快就會成爲現實。

https://github.com/kbenoit/spacyr

的示例代碼是這樣的:

library(spacyr) 
spacy_initialize() 

Tokens <- c("1976","green","Normandy","coast","[", "[", "template", "]","]", 
      "Fish","visting","England","?") 
spacy_parse(Tokens, tag = TRUE) 

和輸出是這樣的:

doc_id sentence_id token_id token lemma pos tag entity 
1 text1   1  1  1976  1976 NUM CD DATE_B 
2 text2   1  1 green green ADJ JJ  
3 text3   1  1 Normandy normandy PROPN NNP ORG_B 
4 text4   1  1 coast coast NOUN NN  
5 text5   1  1  [  [ PUNCT -LRB-  
6 text6   1  1  [  [ PUNCT -LRB-  
7 text7   1  1 template template NOUN NN  
8 text8   1  1  ]  ] PUNCT -RRB-  
9 text9   1  1  ]  ] PUNCT -RRB-  
10 text10   1  1  Fish  fish NOUN NN  
11 text11   1  1 visting  vist VERB VBG  
12 text12   1  1 England england PROPN NNP GPE_B 
13 text13   1  1  ?  ? PUNCT  . 

雖然包可以做更多,你可以找到你所需要的在tag字段中。

注:(2017年5月20日)

現在spacyr包是在CRAN,但版本與非ASCII字符的一些問題。我們在CRAN提交併在github上的版本中解決了這個問題。如果您打算將它用於德語文本,請在github上安裝最新的主文件。 devtools::install_github("kbenoit/spacyr", build_vignettes = FALSE) 此修訂版將在下次更新中整合到CRAN軟件包中。

NOTE2:

有在Windows和Mac上安裝spaCy和spacyr詳細說明。

的Windows: https://github.com/kbenoit/spacyr/blob/master/inst/doc/WINDOWS.md

的Mac: https://github.com/kbenoit/spacyr/blob/master/inst/doc/MAC.md

+1

嘿,謝謝你的回答!看起來像R的一個驚人的包! 我花了4個小時的時間排除故障(主要是用Python),但現在它適用於我!如果有人在未來遇到同樣的問題,我會在下面單獨列出我的步驟!再次感謝,這真是太棒了! –

1

繼承人我所採取的步驟,使amatsuo_net的建議爲我工作:

  1. 安裝spaCy和英語語言庫水蟒:

    作爲管理員打開Anaconda提示

    執行:

    activate py36

    conda config --add channels conda-forge

    conda install spacy

    python -m spacy link en_core_web_sm en

  2. 使用包裝對於R工作室:

    install.packages("fastmatch") install.packages("RcppParallel")

    library(fastmatch) library(RcppParallel)

    devtools::install_github("kbenoit/spacyr", build_vignettes = FALSE)

    library(spacyr)

    spacy_initialize(condaenv = "py36")

    Tokens <- c("1976","green","Normandy","coast","[", "[", "template", "]","]","Fish","visting","England","?");Tokens

    spacy_parse(Tokens, tag = TRUE)