在 R 中为单个 words/tokens 创建 POS 标签

Creating POS tags for single words/tokens in R

我正在寻找一种方法来从我在 R 中的列表中为单个 words/tokens 创建 POS 标签。我知道如果我为单个标记而不是句子这样做,但数据的准确性会降低我有 "delete edits" 来自维基百科,人们大多删除单个、不相关的单词而不是整个句子。我已经为 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 中的任何东西。他们还特别声明不要在单个 words/Tokens.[=14 上使用它=]

我的问题是:是否可以在 R 中以合理的准确性执行此操作?不包含句子结构的代码看起来如何?将列表与巨大的标记日记进行比较会更容易吗?

一般来说,原生 R 中没有像样的 post 标注器,所有可能的解决方案都依赖于外部库。作为此类解决方案之一,您可以在后端使用 spaCy 试用我们的包 spacyr。它尚未在 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 上安装最新的母版。 devtools::install_github("kbenoit/spacyr", build_vignettes = FALSE) 此修订将在下一次更新中合并到 CRAN 包中。

注2:

在 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

以下是我使 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. 使用 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)