我在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]
这是我被卡住的地方,原因如下:
- NLTK没有可以将法语分成单词的内置标记器。白色空间不能很好地工作,特别是由于它不会在撇号上正确分离。
- 即使我使用正则表达式分成单个单词,也没有法语PoS(词性)标记器可用于标记这些单词,也无法将它们分成逻辑单元的意义
对于英语,我可以像这样标记和分块文本:
tagged = [nltk.pos_tag(token) for token in tokens]
chunks = nltk.batch_ne_chunk(tagged)
我的主要选项(按当前偏好顺序)似乎是:
- 使用 NLTK-教练 训练我自己的标记和chunker。
- 使用TreeTagger的python包装器只是这一部分,因为TreeTagger已经可以标记法语,并且有人编写了一个调用TreeTagger二进制文件并解析结果的包装器。
- 完全使用不同的工具。
如果我要做(1),我想我需要创建自己的标记语料库。这是正确的,还是可以(并且允许)使用法国树库?
如果法国树库语料库格式(这里的例子)不适合与nltk-trainer一起使用,将它转换成这种格式是否可行?
将NLTK的法语用户采用PoS标签和块文本的方法是什么?