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