使用 R 中的 tau 包中的 textcnt 函数保留撇号

问题描述 投票:0回答:1

R 的 tau 包中的 textcnt 函数有一个 split 参数,它的默认值是 split = "[[:space:][:punct:][:digit:]]+" ç 这个 argumet 也使用撇号 ' 拆分成单词,我不想那样,我怎么修改参数所以它不使用撇号来拆分单词?

此代码:

`图书馆(头) 文本<-"I don't want the function to use the ' to split"

textcnt(text, split = "[[:space:][:punct:][:digit:]]+",method="string",n=1L)`

产生这个输出:

 don function        i    split        t      the       to      use     want 
   1        1        1        1        1        2        2        1        1 

而不是 don 1 和 t 1,我想保留 don't 作为 1 个词

我尝试使用 str_replace_all 从 stringr 中预先删除标点符号,然后省略 textcnt 中参数的标点部分,但它不使用所有类型的符号,如 & > 或 " 来拆分,我试图修改split 参数但是它根本不拆分句子或者它保留符号

谢谢

r regex apostrophe
1个回答
0
投票

基于 PCRE 的函数你需要使用

split = "(?:(?!')[[:space:][:punct:][:digit:]])+|'\\B|\\B'"

这里,

  • (?:
    - 容器非捕获组的开始:
  • (?!')
    - 如果下一个字符是
    '
    char
  • ,则匹配失败
  • [[:space:][:punct:][:digit:]]
    - 匹配空格、标点符号或数字字符
  • )+
    - 匹配一次或多次(连续)
  • '\B
    - 一个
    '
    字符,后跟字符串的任一端或非单词字符
  • |
    - 或
  • \B'
    -
    '
    前面是字符串开头或非单词字符。

具有

stringr
功能,您可以使用

split = "[[:space:][:punct:][:digit:]--[']]+|'\\B|\\B'"

在这里,

[[:space:][:punct:][:digit:]--[']]
匹配除
[[:space:][:punct:][:digit:]]
字符外的所有由
'
匹配的字符。

stringr
ICU regex flavor supports character class subtraction using this notation.

© www.soinside.com 2019 - 2024. All rights reserved.