python - Django - 如何创建一个包含 TextField 的每个单词的字典
问题描述
如何将 DjangoTextField
转换为包含该字段中所有单词的字典?
我尝试了以下方法,但它似乎不起作用(没有错误,但在我的模板或 shell 中看不到任何内容):
def song_words():
result = Song.objects.filter(pk=request.pk).values_list('lyrics_ru',flat=True)
r_list =[]
for r in result:
r_list.append(r.split())
return r_list
我也试过:
def get_word(self):
dict_value = getattr(self, 'lyrics_ru_dict', None)
if not dict_value:
import json
dict_value = json.loads(self.lyrics_ru)
setattr(self, 'lyrics_ru_dict', dict_value)
return dict_value
def set_word(self, new_lyrics_ru):
import json
self.lyrics_ru = json.dumps(new_lyrics_ru).encode('utf8')
self.lyrics_ru_dict = dict(new_lyrics_ru)
word = property(get_word, set_word)
但我收到以下错误:json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
. 我对 json 没有任何经验,我不知道这是否是正确的方法。
这是我的模型:
class Song(models.Model):
title = models.CharField(max_length=25)
artist = models.CharField(max_length=25)
url = models.URLField()
lyrics_ru = models.TextField(max_length=1500)
lyrics_gb = models.TextField(max_length=1500)
def __str__(self):
return self.title
我的最终目标是我想将其中包含的单词与不同模型中lyrics_ru
的单词(特别是)进行比较:target_word
class Word(models.Model):
target_word = models.CharField(max_length=25)
source_word = models.CharField(max_length=25)
问题是我不知道我是否走在正确的轨道上。因此,如果有人可以提供一些建议/链接,我将不胜感激!
解决方案
如果您希望歌词成为不同单词的列表,您可以简单地做的是
words = text.split()
至于您描述的另一部分,您想要比较lyrics_ru
with的数据target_word
并想要单词出现的计数(假设)。所以你能做的是
from collections import Counter
def matching_words():
match = []
result = Song.objects.values_list('lyrics_ru',flat=True).filter(pk=request.pk)
target_word = Word.objects.values_list('target_word')
for i in result:
if i in target_word:
match.append(i) # list of matching words
finaldict = Counter(match) # make dictonary of count
推荐阅读
- javascript - YYYY-MM-DD 的 JavaScript 正则表达式,带有可选的月份和日期
- ios - 'QuerySnapshot' 类型的值没有成员 'data' 将出现错误
- javascript - 在 Vue App 中使用 Axios 发布数据后尝试更新 PHP 查询
- python-3.x - 优化中的顺序约束
- php - Wordpress 网站,add_filter() 以根据语言更改徽标
- php - EntityType 形式的 PersisCollection
- svg - 外部 svg 的多个实例
- excel - RE:员工培训的Excel公式
- unicode - 16 位编码,所有位都映射到某个值
- android - 集成谷歌登录