nltk:word_tokenize更改引号

时间:2015-06-26 13:37:42

标签: python nltk tokenize

我正在使用Python的nltk,我希望对包含引号的句子进行标记,但它会将"变为``''

E.g:

>>> from nltk import word_tokenize

>>> sentence = 'He said "hey Bill!"'
>>> word_tokenize(sentence)
['He', 'said', '``', 'hey', 'Bill', '!', "''"]

为什么不保留原始句子中的引号以及如何解决这个问题?

谢谢

2 个答案:

答案 0 :(得分:2)

这实际上意味着这样做,而不是偶然。来自Penn Treebank Tokenization

  

双引号(“)被改为加倍单个前向和后向引号(``和'')

在之前的版本中,它没有这样做,但去年更新了。换句话说,如果您想要更改,则需要修改treebank.py

答案 1 :(得分:0)

扩大Leb提供的答案:

Penn Treebank令牌化的URL不再可用。但是它存在于ftp://ftp.cis.upenn.edu/pub/treebank/public_html/tokenization.html

在此处复制粘贴内容:

树库令牌化

    Our tokenization is fairly simple:
  
  • 大多数标点符号与相邻单词分开

  • 双引号(“)更改为双单引号和反引号(``and'')

  • 动词收缩和名词的盎格鲁-撒克逊人所有格被分解成它们的成分语素,并标记每个语素

    Examples
         children's --> children 's
         parents' --> parents '
         won't --> wo n't
         gonna --> gon na
         I'm --> I 'm
    

    此标记化使我们可以分别分析每个组成部分,因此(例如)“ I”可以出现在主题名词短语中,而“'m”可以是 主要动词短语的开头。

  • 连字符与破折号,省略号(...)等都有一些细微之处,但是这些通常取决于特定的语料库或 标记数据的应用。

  • 在已分析的语料库中,将类似于括号的字符转换为特殊的3个字母的序列,以避免与分析括号混淆。一些POS 标记,例如Adwait Ratnaparkhi的MXPOST,需要使用此表单 他们的投入。 换句话说,这些令牌位于POS文件中:()[] {} 在已解析的文件中成为:-LRB- -RRB- -RSB- -RSB- -LCB- -RCB- (首字母缩写代表(左|右)((圆|方|弯)括号)。)

    这是一个简单的sed脚本,一旦将语料库格式化为大多数语料库,就可以完成足够体面的工作 每行一个句子。

斯坦福大学的例子:

https://nlp.stanford.edu/software/tokenizer.shtml

命令行用法部分显示了如何根据Penn Treebank标记化规则更改双引号的示例。

https://www.nltk.org/_modules/nltk/tokenize/treebank.html

TreebankWordTokenizer类显示了如何实现更改:

# starting quotes
 (re.compile(r"^\""), r"``")

# ending quotes
(re.compile(r'"'), " '' ")