我在JSON文件中有30,000多种法语文章。我想对单个文章和整个集合进行一些文本分析。我进一步走之前,我开始用简单的目标:如何使用NLTK和Python标记和块法文文本?
- 识别重要的实体(人,地点,概念)
- 查找的重要性,这些实体随时间变化显著(〜=频率)(使用文章序列号作为时间的代理)
我到目前为止所采取的步骤:
中的数据导入到一个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]
这是我坚持,有以下原因:
- NLTK不具有一个内置的分词器,可以分割成法语单词。空白区域效果不佳,特别是由于它不能正确分隔撇号。
- 即使我用正则表达式分割成单个的单词,就没有法国的PoS恶搞(词性),我可以用它来标记那些话,并没有办法大块他们进入意思
对于英语,我可以标记和大块的文本,像这样:
tagged = [nltk.pos_tag(token) for token in tokens]
chunks = nltk.batch_ne_chunk(tagged)
我的主要选项(在当前的优先顺序排列)似乎是:
- 使用nltk-trainer来训练我自己的标签和chunker。
- 只为这部分使用TreeTagger的python包装器,因为TreeTagger已经可以标记法语,并且有人编写了一个调用TreeTagger二进制文件并分析结果的包装器。
- 完全使用不同的工具。
如果我要做(1),我想我需要创建自己的带标签的语料库。这是正确的,还是有可能(并预先)使用法国的Treebank?
如果法语Treebank语料库格式(example here)不适合与nltk-trainer一起使用,是否可以将它转换为这种格式?
NLTK的法语用户采用PoS标签和大块文本的方法是什么?
+1 WordPunctTokenizer。如果有法国的Treebank,那么这可能是一个很好的培训POS机的资源。如果它需要创建一个自定义语料库阅读器,那么我相信NLTK很乐意将其包含在内。一旦你这样做了,nltk-trainer支持指定一个自定义语料库阅读器。 – Jacob 2012-03-13 01:24:11
谢谢Alexis和Jacob。 我不知道现有的法语标记语料库,所以我可能会先尝试TreeTagger。正如你所说,这可能比编写一个自定义语料库阅读器阅读法语树库更容易。 感谢您的建议重新:nltk用户邮件列表。我在网上档案中阅读了一些以前的帖子,但忘记了订阅。 – Rahim 2012-03-13 02:35:51