我在一个 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(词性)标记器可用于标记这些单词,也无法将它们分 block 为逻辑意义单元
对于英语,我可以像这样标记和分 block 文本:
tagged = [nltk.pos_tag(token) for token in tokens]
chunks = nltk.batch_ne_chunk(tagged)
我的主要选择(按当前偏好排序)似乎是:
- 使用nltk-trainer训练我自己的标注器和词 block 划分器。
- 仅在这部分使用 TreeTagger 的 python 包装器,因为 TreeTagger 已经可以标记法语,并且有人编写了一个包装器来调用 TreeTagger 二进制文件并解析结果。
- 完全使用不同的工具。
如果我要执行 (1),我想我需要创建自己的标记语料库。这是正确的,还是可以(并允许)使用 French Treebank?
如果 French Treebank 语料库格式( example here )不适合与 nltk-trainer 使用,是否可以将其转换为这种格式?
NLTK 的法语用户对 PoS 标签和 block 文本采取了哪些方法?
最佳答案
还有带有 Python 包装器的 TreeTagger(支持法语语料库)。这是我目前正在使用的解决方案,效果非常好。
关于python - 如何使用 NLTK 和 Python 标记和分块法语文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9663918/