フォームからユーザーテキストを入力し、入力から質問のみを返すWebサイトを作成しようとしています。私はいくつかの入力が提出されるたびに、最初のユーザー入力と質問の両方をデータベースに保存したいと思います。私は基本的にすべての世話をしていますが、フォームのテキストの提出をテストするたびに、このTypeErrorに固執しています。ここでエラーの詳細は以下のとおりです。ここで(TypeError:Djangoで関数を呼び出すときに期待される文字列またはバイト様オブジェクト)
Traceback:
File "/Users/joshuablew/Projects/HW/env/lib/python3.6/site-packages/django/core/handlers/exception.py" in inner
39. response = get_response(request)
File "/Users/joshuablew/Projects/HW/env/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
187. response = self.process_exception_by_middleware(e, request)
File "/Users/joshuablew/Projects/HW/env/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
185. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Users/joshuablew/Projects/HW/HWapp/v1/views.py" in user_text_view
20. user_questions = Question_Init(user_input_obj)
File "/Users/joshuablew/Projects/HW/HWapp/v1/function1.py" in Question_Init
23. textList = sent_tokenize(text1)
File "/Users/joshuablew/Projects/HW/env/lib/python3.6/site-packages/nltk/tokenize/__init__.py" in sent_tokenize
94. return tokenizer.tokenize(text)
File "/Users/joshuablew/Projects/HW/env/lib/python3.6/site-packages/nltk/tokenize/punkt.py" in tokenize
1237. return list(self.sentences_from_text(text, realign_boundaries))
File "/Users/joshuablew/Projects/HW/env/lib/python3.6/site-packages/nltk/tokenize/punkt.py" in sentences_from_text
1285. return [text[s:e] for s, e in self.span_tokenize(text, realign_boundaries)]
File "/Users/joshuablew/Projects/HW/env/lib/python3.6/site-packages/nltk/tokenize/punkt.py" in span_tokenize
1276. return [(sl.start, sl.stop) for sl in slices]
File "/Users/joshuablew/Projects/HW/env/lib/python3.6/site-packages/nltk/tokenize/punkt.py" in <listcomp>
1276. return [(sl.start, sl.stop) for sl in slices]
File "/Users/joshuablew/Projects/HW/env/lib/python3.6/site-packages/nltk/tokenize/punkt.py" in _realign_boundaries
1316. for sl1, sl2 in _pair_iter(slices):
File "/Users/joshuablew/Projects/HW/env/lib/python3.6/site-packages/nltk/tokenize/punkt.py" in _pair_iter
310. prev = next(it)
File "/Users/joshuablew/Projects/HW/env/lib/python3.6/site-packages/nltk/tokenize/punkt.py" in _slices_from_text
1289. for match in self._lang_vars.period_context_re().finditer(text):
Exception Type: TypeError at /input/
Exception Value: expected string or bytes-like object
は、私は、テキスト上で実行している機能である:
import nltk
from nltk.tokenize import sent_tokenize
from v1 import views
def Question_Init(user_input_obj):
Beginning_Question_Prompts = ("Who","Whom","What","Where","When","Why","Which",
"Whose","How","Was","Were","Did","Do","Does","Is")
Ending_Question_Prompts = ("?",":","...")
questions = []
text1 = user_input_obj
textList = sent_tokenize(text1)
for sentence in textList:
if sentence.startswith(Beginning_Question_Prompts):
questions.append(sentence)
if sentence.endswith(Ending_Question_Prompts):
questions.append(sentence)
return questions
ここに私の見解は、私は私のデータベースと実行への入力を保存するために使用していますです入力上の私の機能。
def text_input(request):
form = forms.UserTextForm()
if request.method == 'POST':
request:
form = forms.UserTextForm(request.POST)
if form.is_valid():
user_input = request.POST.get('user_input', '')
user_input_obj = models.UserText(user_input = user_input)
user_questions = Question_Init(user_input_obj)
user_questions.save()
print(user_questions)
else:
form = forms.UserTextForm()
return render(request, 'text_input_form.html', {'form': form})
そして、私のモデル:
class UserText(models.Model):
user_input = models.CharField(max_length=2000)
私は、このエラーは私が行う必要が私に言っているのか理解していません。ユーザー入力を文字列型またはバイト型のものに変換する必要がありますか?これを行うにはどうしたらいいですか?私は、私のモデルでユニコード()メソッドを使って何かをする必要があるかもしれないことも読んだことがあります。私はこの状況でユニコードを使う方法に慣れていません。ユニコードはここで意味がありますか?助けてくれてありがとう、私はそれを感謝します。
私が理解できないことは、それらのTextInputインスタンスで何をやっているのか、なぜそれらにデータを渡しているのかということです。それをしないで、あなたの問題はおそらく遠ざかります。 –
@DanielRoseman TextInputは、ユーザーデータを受け取るTextInputFormに接続されたモデルです。これは必要ないのですか? – jblew
これは組み込みのフォームウィジェットの名前でもありますが、気にする必要はありません。しかし、あなたのnltkコードでは、あなたは何か非常に奇妙なことをしています。関数に渡された 'user_input_obj'オブジェクトを無視して、TextInputクラス自体を介してフィールドに直接アクセスしてみてください。意味はありません。 –