我在JSON文件中有30,000多个法语文章。我想对单个文章和整个集合进行一些文本分析。在我走得更远之前,我从简单的目标开始:
到目前为止我采取的步骤:
将数据导入python列表:
import json
json_articles=open('articlefile.json')
articlelist = json.load(json_articles)
选择要测试的单篇文章,并将正文文本连接成一个字符串:
txt = ' '.join(data[10000]['body'])
加载一个法语句子标记器并将该字符串拆分为句子列表:
nltk.data.load('tokenizers/punkt/french.pickle')
tokens = [french_tokenizer.tokenize(s) for s in sentences]
尝试使用WhiteSpaceTokenizer将句子拆分为单词:
from nltk.tokenize import WhitespaceTokenizer
wst = WhitespaceTokenizer()
tokens = [wst.tokenize(s) for s in sentences]
这是我被困的地方,原因如下:
对于英语,我可以像这样标记和分块文本:
tagged = [nltk.pos_tag(token) for token in tokens]
chunks = nltk.batch_ne_chunk(tagged)
我的主要选项(按当前偏好顺序)似乎是:
如果我要做(1),我想我需要创建自己的标记语料库。这是正确的,还是可以(并允许)使用法国树库?
如果法国树库语料库格式(example here)不适合与nltk-trainer一起使用,将其转换为这种格式是否可行?
NLTK的法语用户采用PoS标签和块文本的方法是什么?
答案 0 :(得分:5)
自版本3。1。0(2012年1月)起,Stanford PoS tagger支持法语。
应该可以在NLTK中使用这个法语标记,使用Nitin Madnani的Interface to the Stanford POS-tagger
我还没有尝试过,但这听起来比我考虑过的其他方法更容易,而且我应该能够在Python脚本中控制整个管道。当我有分享的结果时,我会对这篇文章发表评论。
答案 1 :(得分:5)
还有一个带有Python包装器的TreeTagger(支持法语语料库)。这是我目前使用的解决方案,它的效果非常好。
答案 2 :(得分:4)
以下是一些建议:
WhitespaceTokenizer
正在做它的意图。如果要拆分撇号,请尝试WordPunctTokenizer
,查看其他可用的令牌化程序,或使用Regexp tokenizer或直接使用re
模块滚动。
确保您已解决文本编码问题(unicode或latin1),否则令牌化仍会出错。
正如您所发现的那样,nltk只附带英文标记。听起来使用TreeTagger是最不起作用的,因为它(几乎)准备好使用。
训练自己也是一个实用的选择。但你绝对不应该创建自己的训练语料库!使用现有的标记法语语料库。如果培训文本的类型与您的域(文章)匹配,您将获得最佳结果。此外,您可以使用nltk-trainer,但您也可以直接使用NLTK功能。
您可以使用French Treebank语料库进行培训,但我不知道是否有读者知道其确切格式。如果没有,您必须从XMLCorpusReader开始并将其子类化以提供tagged_sents()方法。
如果您尚未加入nltk-users邮件列表,我认为您希望加入它。