拼音汉字转换系统设计 实验输入输出要求 一元词频统计: 输出一个词与频数对照列表,word_freq.txt,词与频数之间用空格或者制表符切分,每个词及其频数占一行。 格式要求: Word1 freq1 Word2 freq2 … Bigram频度统计 输出一个Bigram与频数对照列表,Bigram_freq.txt, Bigram与频数之间用空格或者制表符切分,每个Bigram及其频数占一行。 格式要求: Bigram1 freq1 Bigram2 freq2 … 拼音汉字自动转换: 该部分实验内容要求Demo展示,生成可执行文件。 在执行可执行文件的时候要求输入拼音串,系统输出是该拼音串对应的可能性最大的汉字串,如 输入: yi zhi mei li de xiao hua 输出: 一只美丽的小花 请用python写出
时间: 2024-02-17 08:01:47 浏览: 211
以下是Python代码实现:
一元词频统计:
```python
import re
from collections import defaultdict
# 读取文本文件内容
with open('input.txt', 'r', encoding='utf-8') as f:
text = f.read()
# 使用正则表达式分词
words = re.findall(r'\w+', text)
# 统计词频
word_freq_dict = defaultdict(int)
for word in words:
word_freq_dict[word] += 1
# 将词频按降序排列
sorted_word_freq = sorted(word_freq_dict.items(), key=lambda x: x[1], reverse=True)
# 将结果写入文件
with open('word_freq.txt', 'w', encoding='utf-8') as f:
for word, freq in sorted_word_freq:
f.write(word + ' ' + str(freq) + '\n')
```
Bigram频度统计:
```python
import re
from collections import defaultdict
# 读取文本文件内容
with open('input.txt', 'r', encoding='utf-8') as f:
text = f.read()
# 使用正则表达式分词
words = re.findall(r'\w+', text)
# 统计Bigram频度
bigram_freq_dict = defaultdict(int)
for i in range(len(words) - 1):
bigram = words[i] + ' ' + words[i+1]
bigram_freq_dict[bigram] += 1
# 将Bigram频度按降序排列
sorted_bigram_freq = sorted(bigram_freq_dict.items(), key=lambda x: x[1], reverse=True)
# 将结果写入文件
with open('bigram_freq.txt', 'w', encoding='utf-8') as f:
for bigram, freq in sorted_bigram_freq:
f.write(bigram + ' ' + str(freq) + '\n')
```
拼音汉字自动转换:
```python
import pypinyin
import json
# 加载汉字拼音表
with open('pinyin_dict.json', 'r', encoding='utf-8') as f:
pinyin_dict = json.load(f)
# 加载汉字频度表
with open('word_freq.txt', 'r', encoding='utf-8') as f:
word_freq_list = [line.strip().split() for line in f.readlines()]
# 将汉字频度表转换为字典
word_freq_dict = dict(word_freq_list)
# 定义转换函数
def convert_pinyin_to_chinese(pinyin_str):
# 将拼音字符串转换为列表
pinyin_list = pinyin_str.split()
# 计算每个汉字的概率
chinese_prob_dict = {}
for chinese, freq in word_freq_dict.items():
pinyin_prob = 1
for i in range(len(chinese)):
pinyin_prob *= pinyin_dict[chinese[i]][pinyin_list[i]]
chinese_prob_dict[chinese] = pinyin_prob * freq
# 将概率按降序排列
sorted_chinese_prob = sorted(chinese_prob_dict.items(), key=lambda x: x[1], reverse=True)
# 返回可能性最大的汉字串
return sorted_chinese_prob[0][0]
# 读取拼音串
pinyin_str = input('请输入拼音串:')
# 转换拼音串为汉字串
chinese_str = convert_pinyin_to_chinese(pinyin_str)
# 输出结果
print(chinese_str)
```
需要注意的是,以上代码只是简单的示例代码,具体实现还需要根据具体需求进行优化和改进。
阅读全文