如何将字符向量列表转换为 quanteda 标记对象?
How to transform a list of character vectors into a quanteda tokens object?
我有一个包含文档标记的字符向量列表。
list(doc1 = c("I", "like", "apples"), doc2 = c("You", "like", "apples", "too"))
我想将此向量转换为 quanteda tokens
(或 dfm
)对象,以便使用一些 quantedas 功能。
最好的方法是什么?
我意识到我可以为每个文档执行如下操作:
tokens(paste0(c("I", "like", "apples"), collapse = " "), what = "fastestword")
给出:
Tokens consisting of 1 document.
text1 :
[1] "I" "like" "apples"
但这感觉像是一个 hack,而且也不可靠,因为我的一些令牌对象中有空格。有没有办法让这些数据结构的传输更顺畅?
根据 ?tokens
,x
可以是 list
。
x - the input object to the tokens constructor, one of: a (uniquely) named list of characters; a tokens object; or a corpus or character object that will be tokenized
所以我们只需要
library(quanteda)
tokens(lst1, what = 'fastestword')
您可以从以下构造一个令牌对象:
- 一个字符向量,在这种情况下,对象被标记化,每个字符元素成为一个“文档”
- 一个语料库,它是一个特殊分类的字符向量,在tokens对象中以同样的方式被token化并转化为文档
- 一个字符元素列表,在这种情况下,每个列表元素都成为一个标记化文档,并且该列表的每个元素都成为一个标记(但没有进一步标记化)
- 一个令牌对象,它被视为与字符元素列表相同。
也可以使用 as.tokens(mylist)
将字符元素列表转换为标记对象。不同之处在于使用 tokens()
,您可以访问所有选项,例如 remove_punct
。使用 as.tokens()
,转换是直接的,没有选项,所以如果你不需要选项会更快一些。
lis <- list(
doc1 = c("I", "like", "apples"),
doc2 = c("One two", "99", "three", ".")
)
library("quanteda")
## Package version: 3.0.9000
## Unicode version: 13.0
## ICU version: 69.1
## Parallel computing: 8 of 8 threads used.
## See https://quanteda.io for tutorials and examples.
tokens(lis)
## Tokens consisting of 2 documents.
## doc1 :
## [1] "I" "like" "apples"
##
## doc2 :
## [1] "One two" "99" "three" "."
tokens(lis, remove_punct = TRUE, remove_numbers = TRUE)
## Tokens consisting of 2 documents.
## doc1 :
## [1] "I" "like" "apples"
##
## doc2 :
## [1] "One two" "three"
强制转换,没有选项:
as.tokens(lis)
## Tokens consisting of 2 documents.
## doc1 :
## [1] "I" "like" "apples"
##
## doc2 :
## [1] "One two" "99" "three" "."
我有一个包含文档标记的字符向量列表。
list(doc1 = c("I", "like", "apples"), doc2 = c("You", "like", "apples", "too"))
我想将此向量转换为 quanteda tokens
(或 dfm
)对象,以便使用一些 quantedas 功能。
最好的方法是什么?
我意识到我可以为每个文档执行如下操作:
tokens(paste0(c("I", "like", "apples"), collapse = " "), what = "fastestword")
给出:
Tokens consisting of 1 document.
text1 :
[1] "I" "like" "apples"
但这感觉像是一个 hack,而且也不可靠,因为我的一些令牌对象中有空格。有没有办法让这些数据结构的传输更顺畅?
根据 ?tokens
,x
可以是 list
。
x - the input object to the tokens constructor, one of: a (uniquely) named list of characters; a tokens object; or a corpus or character object that will be tokenized
所以我们只需要
library(quanteda)
tokens(lst1, what = 'fastestword')
您可以从以下构造一个令牌对象:
- 一个字符向量,在这种情况下,对象被标记化,每个字符元素成为一个“文档”
- 一个语料库,它是一个特殊分类的字符向量,在tokens对象中以同样的方式被token化并转化为文档
- 一个字符元素列表,在这种情况下,每个列表元素都成为一个标记化文档,并且该列表的每个元素都成为一个标记(但没有进一步标记化)
- 一个令牌对象,它被视为与字符元素列表相同。
也可以使用 as.tokens(mylist)
将字符元素列表转换为标记对象。不同之处在于使用 tokens()
,您可以访问所有选项,例如 remove_punct
。使用 as.tokens()
,转换是直接的,没有选项,所以如果你不需要选项会更快一些。
lis <- list(
doc1 = c("I", "like", "apples"),
doc2 = c("One two", "99", "three", ".")
)
library("quanteda")
## Package version: 3.0.9000
## Unicode version: 13.0
## ICU version: 69.1
## Parallel computing: 8 of 8 threads used.
## See https://quanteda.io for tutorials and examples.
tokens(lis)
## Tokens consisting of 2 documents.
## doc1 :
## [1] "I" "like" "apples"
##
## doc2 :
## [1] "One two" "99" "three" "."
tokens(lis, remove_punct = TRUE, remove_numbers = TRUE)
## Tokens consisting of 2 documents.
## doc1 :
## [1] "I" "like" "apples"
##
## doc2 :
## [1] "One two" "three"
强制转换,没有选项:
as.tokens(lis)
## Tokens consisting of 2 documents.
## doc1 :
## [1] "I" "like" "apples"
##
## doc2 :
## [1] "One two" "99" "three" "."