标记为nltk.corpus.nps_chat.xml_post

时间:2017-01-08 05:20:34

标签: python tags nltk

您好我正在使用NLTK,nps_chat语料库。

我知道我可以像访问

一样访问nps聊天语料库
posts = nltk.corpus.nps_chat.xml_posts()

我准备了Labeled_names列表,如下所示

Labeled_names=[(post.text,post.get('class')) for post in posts]

我得到了关注,

>>> Labeled_names[:10]
[('now im left with this gay name', 'Statement'), (':P', 'Emotion'), ('PART', 'System'), ('hey everyone  ', 'Greet'), ('ah well', 'Statement'), ('NICK :10-19-20sUser7', 'System'), ('10-19-20sUser7 is a gay name.', 'Accept'), ('.ACTION gives 10-19-20sUser121 a golf clap.', 'System'), (':)', 'Emotion'), ('JOIN', 'System')]

我需要知道的是,有没有一种方法可以使用nltk.corpus.nps_chat.xml_post获取标记文本,而不仅仅是文本?

1 个答案:

答案 0 :(得分:1)

nps_chat API并没有提供一种简单的方法来同时查看POS标记和发布元数据,但它是一个单行的问题,用于导航返回的XML元素xml_posts()并获取此信息。这是一个小小的演示:

from nltk.corpus import nps_chat

for p in nps_chat.xml_posts()[3:5]:
    print(p.get("class"), p.get("user"))
    print(p.text)
    tagged_words = list((t.get("word"), t.get("pos")) for t in p[0]) # <-- here it is
    print(tagged_words)
    print()

输出:

Greet 10-19-20sUser59
hey everyone  
[('hey', 'UH'), ('everyone', 'NN')]

Statement 10-19-20sUser115
ah well
[('ah', 'UH'), ('well', 'UH')]

每个xml_post都有一个唯一元素terminals,其中包含一系列元素t,每个元素都有wordpos个属性。完整路径:Session/Posts/Post/terminals/t。所以terminals元素是p[0],我们迭代它的子元素来获取它们的单词和POS标记。