【问题标题】:How can I get string as input to Bigrams in nltk如何在 nltk 中获取字符串作为 Bigrams 的输入
【发布时间】:2016-06-08 03:24:59
【问题描述】:

我是 nltk 的新手,我正在使用 python。 我将字符串作为 Bigrams 的输入。当我展示这个项目时。我把每个字符都当作一个词。

import nltk   
string = "Batman Superman"   
bigram = nltk.bigrams(string) 
print bigram.item() 
[('B','a'),('a','t'),('t','m'),('m','a'),('a','n'),('n',' '),(' ','S'),
('S','u'),('u','p'),('p','e'),('e','r'),('r','m')('m','a'),('a','n')] 

但我希望输出为 [('Batman','Superman')] 请告诉我如何仅将字符串作为输入来获得此输出 Bigrams 函数但不将列表作为输入。

【问题讨论】:

  • 你必须先标记你的字符串。参考here

标签: python


【解决方案1】:

好的,所以这里发生的事情是 bigrams 函数期待您的语料库的标记化版本,即按顺序排列的单词列表。

当您将字符串传递给它时,nltk 会尽最大努力将该字符串转换为字符列表,然后生成该列表的二元组,这恰好是字符对。

如果你想获得词块二元组,你需要像这样标记你的输入句子:

>>> string = "Batman Superman"
>>> tokenized = string.split(" ")
>>> list(nltk.bigrams(tokenized))
[('Batman', 'Superman')]

【讨论】:

  • 但我希望 [('Batman','Superman')] 作为输出,即使将输入作为字符串。这可能吗??
  • 否,因为bigrams 函数需要一个令牌列表来使用。如果你想让它更短,你可以做nltk.bigrams(string.split(" "))
  • 字符串的标记化版本将表示相同的数据,只是采用适合nltk 使用的格式。
  • 如果我将字符串转换为标记并作为输入传递给 bigrams 函数。然后它将包含每对可能的连续单词(令牌)。如果我想找到有意义的二元组,我将如何获得有意义的二元组。
  • 请定义“有意义的二元组”。如果你想问语义解析,那应该是一个单独的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-19
  • 1970-01-01
  • 2020-04-10
  • 2018-12-10
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多