用flask框架实现网页版的英文单词的词频统计,将如下一段英文输入编辑框中,统计单词的词频,并按词频降序输出。
时间: 2024-12-15 08:18:54 浏览: 2
要使用 Flask 框架实现一个简单的英文单词词频统计 Web 应用,首先确保你已经安装了 Flask、Flask-WTF(用于处理表单)和 Flask-SQLAlchemy(数据库操作)。这里我会给你提供一个基本的架构:
1. 安装依赖:
```
pip install flask flask-wtf flask-sqlalchemy
```
2. 创建一个 `app.py` 文件,开始设置 Flask 应用并定义主要功能:
```python
from flask import Flask, render_template, request
from flask_sqlalchemy import SQLAlchemy
from flask_wtf import FlaskForm
import re
# 初始化 Flask 应用
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///wordfreq.db' # 使用 SQLite 数据库
db = SQLAlchemy(app)
# 建立单词表模型
class Word(db.Model):
id = db.Column(db.Integer, primary_key=True)
word = db.Column(db.String(100), unique=True, nullable=False)
frequency = db.Column(db.Integer, default=1)
# 表单类
class WordCountForm(FlaskForm):
text = db.TextAreaField('Enter your text:', validators=[data_required()])
@app.route('/', methods=['GET', 'POST'])
def index():
form = WordCountForm()
if form.validate_on_submit(): # 如果提交并且验证成功
text = form.text.data.strip().lower() # 获取文本并转为小写
words = re.findall(r'\b\w+\b', text) # 使用正则表达式提取单词
for word in words:
existing_word = Word.query.filter_by(word=word).first() # 查看是否已存在
if existing_word:
existing_word.frequency += 1
else:
new_word = Word(word=word, frequency=1)
db.session.add(new_word)
db.session.commit() # 提交到数据库
return render_template('results.html', form=form, word_counts=Word.query.order_by(Word.frequency.desc()).all()) # 返回结果页面
return render_template('index.html', form=form)
if __name__ == '__main__':
app.run(debug=True)
```
3. 创建两个模板文件:
- `templates/index.html` (显示表单):
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Word Frequency Counter</title>
</head>
<body>
<h1>English Word Frequency Counter</h1>
<form method="post" action="/">
{{ form.csrf_token }}
{{ form.text.label }}<br>
{{ form.text }}<br>
<input type="submit" value="Submit">
</form>
</body>
</html>
```
- `templates/results.html` (显示结果):
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Word Frequency Results</title>
</head>
<body>
<h1>Word Frequency Results:</h1>
<table>
<tr>
<th>Word</th>
<th>Frequency</th>
</tr>
{% for word in word_counts %}
<tr>
<td>{{ word.word }}</td>
<td>{{ word.frequency }}</td>
</tr>
{% endfor %}
</table>
</body>
</html>
```
现在,你可以运行 `app.py` 启动服务器,访问 `http://localhost:5000/` 来使用这个应用。当用户输入英文文本并点击提交后,应用会在服务器端统计词频并将结果按降序展示。
阅读全文