在R

时间:2017-05-18 14:05:01

标签: r words opennlp pos-tagger

我正在寻找一种方法来为我在R中的列表中的单个单词/标记创建POS标签。我知道如果我使用单个标记而不是句子,那么准确性会降低但我拥有的数据是& #34;删除编辑"来自维基百科和人们大多删除单个,未连接的单词而不是整个句子。我已经为Python看了几次这个问题,但我还没有在R中找到它的解决方案。

我的数据会像这样看起来像

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中以合理的准确度执行此操作?代码如何不包含句子结构?将这些列表与一个标记为大的日记进行比较会更容易吗?

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-05-20)

现在spacyr包在CRAN上,但该版本在非ascii字符方面存在一些问题。我们在CRAN提交后认识到了这个问题,并在github上的版本中解决了。如果您打算将其用于德语文本,请在github上安装最新的master。 devtools::install_github("kbenoit/spacyr", build_vignettes = FALSE) 此修订将在下次更新时合并到CRAN包中。

<强>注2:

有关于在Windows和Mac上安装spaCy和spacyr的详细说明。

视窗: https://github.com/kbenoit/spacyr/blob/master/inst/doc/WINDOWS.md

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

答案 1 :(得分:1)

接下来我采取了让amatsuo_net的建议为我工作的步骤:

  1. 为anaconda安装spaCy和英语语言库:

    以管理员身份打开Anaconda提示

    执行:

    activate py36

    conda config --add channels conda-forge

    conda install spacy

    python -m spacy link en_core_web_sm en

  2. 使用Wrapper for R studio:

    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)