python - 如何将 ngrams 生成器结果保存在文本文件中?
问题描述
我正在使用 nltk 和 python 从语料库中提取 ngram,我需要将生成的 ngram 保存在文本文件中。
我试过这段代码但没有结果:
import nltk, re, string, collections
from nltk.util import ngrams
with open("titles.txt", "r", encoding='utf-8') as file:
text = file.read()
tokenized = text.split()
Monograms = ngrams(tokenized, 1)
MonogramFreq = collections.Counter(Monograms)
with open('output.txt', 'w') as f:
f.write(str(MonogramFreq))
这是title.txt的示例:
Joli appartement s3 aux jardins de carthage mz823
Villa 600m2 haut standing à hammamet
Hammem lif
S2 manzah 7
Terrain constructible de 252m2 clôturé
Terrain nu a gammarth
Terrain agrecole al fahes
Bureau 17 pièces
Usine 5000m2 mannouba
MongramFreq 的简单打印必须给出如下内容:
('atelier',): 17, ('430',): 17, ('jabli',): 17, ('mall',): 17, ('palmeraies',): 17, ('r4',): 17, ('dégagée',): 17, ('fatha',): 17
但是甚至没有创建output.txt文件。
我更正了我的代码如下:
import nltk, re, string, collections
from nltk.util import ngrams
with open("titles.txt", "r", encoding='utf-8') as file:
text = file.read()
tokenized = text.split()
Threegrams = ngrams(tokenized, 3)
ThreegramFreq = collections.Counter(Threegrams)
for i in ThreegramFreq.elements():
with open('output.txt', 'a') as w:
w.write(str(i))
w.close()
这是 output.txt 的示例:
('les', 'étudiants', 'S1')('Joli', 'appartement', 's3')('Joli', 'appartement', 's3')('Joli', 'appartement', 's3')('Joli', 'appartement', 's3')('Joli', 'appartement', 's3')('Joli', 'appartement', 's3')('Joli', 'appartement', 's3')('Joli', 'appartement', 's3')('Joli', 'appartement', 's3')('Joli', 'appartement', 's3')('Joli', 'appartement', 's3')('Joli', 'appartement', 's3')('Joli', 'appartement', 's3')('appartement', 's3', 'aux')('appartement', 's3', 'aux')('appartement', 's3', 'aux')('appartement', 's3', 'aux')('appartement', 's3', 'aux')('s3', 'aux', 'jardins')('s3', 'aux', 'jardins')('s3', 'aux', 'jardins')('s3', 'aux', 'jardins')('s3', 'aux', 'jardins')('s3', 'aux', 'jardins')('s3', 'aux', 'jardins')('s3', 'aux', 'jardins')('s3', 'aux', 'jardins')('s3', 'aux', 'jardins')('aux', 'jardins', 'de')('aux', 'jardins', 'de')('aux', 'jardins', 'de')('aux', 'jardins', 'de')('aux', 'jardins', 'de')('aux', 'jardins', 'de')('aux', 'jardins', 'de')('aux', 'jardins', 'de')('aux', 'jardins', 'de')('aux', 'jardins', 'de')('aux', 'jardins', 'de')('aux', 'jardins', 'de')('aux', 'jardins', 'de')('aux', 'jardins', 'de')('aux', 'jardins', 'de')('aux', 'jardins', 'de')('aux', 'jardins', 'de')('aux', 'jardins', 'de')('aux', 'jardins', 'de')('aux', 'jardins', 'de')('aux', 'jardins', 'de')('aux', 'jardins', 'de')('aux', 'jardins', 'de')('aux', 'jardins', 'de')('aux', 'jardins', 'de')('aux', 'jardins', 'de')('aux', 'jardins', 'de')('aux', 'jardins', 'de')('aux', 'jardins', 'de')('aux', 'jardins', 'de')('aux', 'jardins', 'de')('aux', 'jardins', 'de')('aux', 'jardins', 'de')('aux', 'jardins', 'de')('jardins', 'de', 'carthage')('jardins', 'de', 'carthage')('jardins', 'de', 'carthage')('jardins', 'de', 'carthage')('jardins', 'de', 'carthage')('jardins', 'de', 'carthage')('jardins', 'de', 'carthage')('jardins', 'de', 'carthage')('jardins', 'de', 'carthage')('jardins', 'de', 'carthage')('jardins', 'de', 'carthage')('jardins', 'de', 'carthage')('jardins', 'de', 'carthage')('jardins', 'de', 'carthage')
但我需要在我的 output.txt 文件中有每个 3 克的频率。怎么做 ?
解决方案
TL;博士
但请至少阅读评论:
from collections import Counter
from nltk import word_tokenize, ngrams
text='''Joli appartement s3 aux jardins de carthage mz823
Villa 600m2 haut standing à hammamet
Hammem lif
S2 manzah 7
Terrain constructible de 252m2 clôturé
Terrain nu a gammarth
Terrain agrecole al fahes
Bureau 17 pièces
Usine 5000m2 mannouba'''
# Create a counter object to track ngrams and counts.
ngram_counters = Counter()
# Split the text into sentences,
# For now, assume '\n' delimits the sentences.
for line in text.split('\n'):
# Update the counters with ngrams in each sentence,
ngram_counters.update(ngrams(word_tokenize(line), n=3))
# Opens a file to print out.
with open('ngram_counts.tsv', 'w') as fout:
# Iterate through the counter object, like a dictionary.
for ng, counts in ngram_counters.items():
# Use space to join the tokens in the ngrams before printing.
# Print the counts in a separate column.
print(' '.join(ng) +'\t' + str(counts), end='\n', file=fout)
推荐阅读
- bootstrap-4 - 使用按钮设置表单值 (Bootstrap/Bootstrap Studio)
- reactjs - 有条件地在 React 中围绕 div 渲染锚链接
- javascript - 无法访问 .beforeEach() 中的 Buefy 组件
- javascript - 如何使用正则表达式检查单词是否有括号
- reactjs - React 开发服务器不代理表单提交
- uwp - HTTP POST 请求 - 页面完成后如何传递参数
- tensorflow - 使用 colocate_gradients_with_ops=True 在 Keras 中自定义优化器的正确方法是什么?
- ruby - 如何在 Grafana - Youse 表或指标中汇总每天的指标?
- arrays - MongoDB - 选择数组包含文档字段的位置
- amazon-s3 - Amazon S3:在静态站点上添加 301 重定向长 URI 列表