NLTKとFlaskを使用してWebアプリケーションを構築しています。これは単純なRESTfulアプリケーションであり、herokuにデプロイするとすべてうまくいきました。しかし、サーバーがより多くのリクエストを受け取り始めたとき、私はherokuからのメモリ制限である1.5GBに達しました。nltk.RegexpParser
だから、リクエストが来るたびに読み込んでいるからだと思います。
これは本当にシンプルなコードです。
@app.route('/get_keywords', methods=['POST'])
def get_keywords():
data_json = json.loads(request.data)
text = urllib.unquote(data_json["sentence"])
keywords = KeywordExtraction().extract(text)
return ','.join(keywords)
そして、これはキーワード抽出ビットです。
import re
import nltk
nltk.data.path.append('./nltk_data/')
from nltk.corpus import stopwords
class KeywordExtraction:
def extract(self, text):
sentences = nltk.sent_tokenize(text)
sentences = [nltk.word_tokenize(sent) for sent in sentences]
sentences = [nltk.pos_tag(sent) for sent in sentences]
grammar = "NP: {}"
cp = nltk.RegexpParser(grammar)
tree = cp.parse(sentences[0])
keywords = [subtree.leaves()[0][0] for subtree in tree.subtrees(filter=lambda t: t.node == 'NP')]
keywords_without_stopwords = [w for w in keywords if not w in stopwords.words('english')]
return list(set(keywords_without_stopwords + tags))
それが私のコードに問題があるのか、FlaskまたはNLTKに問題があるのかわかりません。私はPythonの初心者です。どんな提案でも本当にありがたいです。
私はこれをblitz.ioでテストし、わずか250のリクエストの後、サーバーが爆発してR15をスローし始めました。