在 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 的建议对我有用的步骤:
正在为 anaconda 安装 spaCy 和英语语言库:
以管理员身份打开 Anaconda 提示符
执行:
activate py36
conda config --add channels conda-forge
conda install spacy
python -m spacy link en_core_web_sm en
使用 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)
我正在寻找一种方法来从我在 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 的建议对我有用的步骤:
正在为 anaconda 安装 spaCy 和英语语言库:
以管理员身份打开 Anaconda 提示符
执行:
activate py36
conda config --add channels conda-forge
conda install spacy
python -m spacy link en_core_web_sm en
使用 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)