Python实现一个文本处理系统,支持功能如下: 1. 接受用户输入的文本(必须>=5句话); 2. 排版文本格式并输出,每一个整句均换行显示; 3. 根据用户需求(用户输入)替换文本中的内容; 4. 根据用户需求(用户输入感兴趣的词),统计并输出词频,且打印该词出现在哪一句的什么位置; 5. 记录用户操作历史,保持文本和具体的操作对应(操作以功能序号记录即可),统计用户操作的文本数,每种功能使用的频率并排序。按词频由大到小降序输出 提示:配合lambda表达式,对存储词频的字典使用sorted函数排序
时间: 2023-12-03 11:47:31 浏览: 91
python文本处理
以下是一个简单的Python实现,实现上述所有功能:
```python
import re
class TextProcessor:
def __init__(self):
self.text = ''
self.history = []
self.num_text_edits = 0
self.num_word_freq_queries = 0
self.num_text_formatting_queries = 0
def accept_input(self):
while True:
self.text = input("请输入至少5句话的文本:\n")
if len(re.findall('\.', self.text)) >= 5:
break
def display_text(self):
formatted_text = '\n'.join([s.strip() for s in self.text.split('.')])
print('排版后的文本:')
print(formatted_text)
def replace_text(self):
old_text = input('请输入需要替换的文本:')
new_text = input('请输入替换后的文本:')
self.text = self.text.replace(old_text, new_text)
self.history.append(('replace', old_text, new_text))
self.num_text_edits += 1
def query_word_freq(self):
word = input('请输入您感兴趣的词:')
sentences = [s.strip() for s in self.text.split('.')]
freq_dict = {}
for i, s in enumerate(sentences):
words = s.split()
for j, w in enumerate(words):
if w == word:
if i in freq_dict:
freq_dict[i].append(j)
else:
freq_dict[i] = [j]
if len(freq_dict) > 0:
print("'%s'出现的次数为:%d" % (word, sum([len(l) for l in freq_dict.values()])))
print("出现在以下句子和位置:")
for i, indices in freq_dict.items():
print("第%d句:" % (i+1), end='')
print(','.join([str(idx+1) for idx in indices]))
else:
print("'%s'未在文本中出现过。" % word)
self.history.append(('word_freq', word))
self.num_word_freq_queries += 1
def record_history(self):
self.history.append(('display',))
self.num_text_formatting_queries += 1
def show_history(self):
print('历史记录:')
for i, op in enumerate(self.history):
if op[0] == 'replace':
print("%d. 替换'%s'为'%s'" % (i+1, op[1], op[2]))
elif op[0] == 'word_freq':
print("%d. 统计'%s'的词频" % (i+1, op[1]))
elif op[0] == 'display':
print("%d. 显示排版后的文本" % (i+1))
print("共进行了%d次文本编辑,%d次词频查询,%d次文本排版。" %
(self.num_text_edits, self.num_word_freq_queries, self.num_text_formatting_queries))
self.show_most_common_words()
def show_most_common_words(self):
words = [w.lower() for w in re.findall(r'\w+', self.text)]
freq_dict = {}
for w in words:
if w in freq_dict:
freq_dict[w] += 1
else:
freq_dict[w] = 1
sorted_words = sorted(freq_dict.items(), key=lambda x: x[1], reverse=True)
print("出现最频繁的10个词:")
for w, freq in sorted_words[:10]:
print(w, freq)
def run(self):
while True:
print('\n请选择操作:')
print('1. 接受文本输入')
print('2. 显示排版后的文本')
print('3. 替换文本中的内容')
print('4. 统计词语的词频')
print('5. 查看历史记录')
print('6. 退出程序')
choice = input()
if choice == '1':
self.accept_input()
elif choice == '2':
self.display_text()
self.record_history()
elif choice == '3':
self.replace_text()
elif choice == '4':
self.query_word_freq()
elif choice == '5':
self.show_history()
elif choice == '6':
break
else:
print('无效输入,请重新输入。')
```
这个文本处理系统支持上述所有功能,用户可以根据提示进行操作。其中,记录历史记录的方式是将每个操作表示为一个元组,并将这些元组保存到一个列表中。最后,我们可以使用这个列表统计和输出用户操作历史以及使用频率。
阅读全文