将元组更改为小写 - 特定情况(Python; NLTK)

时间:2015-10-09 21:53:04

标签: python tuples nltk lowercase

我正在使用Python和NLTK并尝试将Brown Corpus更改为小写。

特别是,我的目标是用每个词最可能的词性标记词列表(例如,"圣诞"是名词)。但是,我的单词列表包含所有小写单词(" christmas")。因此,由于案例不匹配,有些词语未被识别。

brown.tagged_sents()中的元组如下所示:

[[(u'The', u'AT'), (u'Fulton', u'NP-TL'), (u'County', u'NN-TL'),...

我尝试过以下代码:

brown_sents = brown.tagged_sents()
brown_sentslower = [[x.lower() for x in element] for element in brown_sents]

但仍然收到错误:

AttributeError: 'tuple' object has no attribute 'lower'

我成功地从另一个答案(Python: Using lower function on tuples)复制了结果,但我想知道使用此代码与brown.tagged_sents()有什么特别之处。

1 个答案:

答案 0 :(得分:3)

将元组中的元素小写:

brown_sentslower = [[(word.lower(), tag.lower()) for word, tag in element]
                    for element in brown_sents]

请注意,我在for循环中使用了元组解包;每个(word, tag)对都会解压缩到wordtag变量中,因此您可以单独解决这些问题。然后循环生成一个 new 元组,其中包含这两个值的小写版本。

这假设您希望标签都是小写的;例如(u'Fulton', u'NP-TL')变为(u'fulton', u'np-tl')

如果只有这个词应该是小写的,请将tag.lower()替换为tag

brown_sentslower = [[(word.lower(), tag) for word, tag in element]
                    for element in brown_sents]