Bug476-ZhangWeiHao-YuHuangtao #85

Open
mrlan wants to merge 9 commits from Bug476-ZhangWeiHao-YuHuangtao into master

@yuhuangtao
请填写具体内容

@yuhuangtao 请填写具体内容
mrlan added 2 commits 2023-05-10 14:36:35 +08:00

工作内容:
改进用户的单词等级评价机制:
本分支通过修改difficulty.py中的get_difficulty_level函数,将用户的单词和系统自带的单词分两次进行评级,具体的流程如下:
1、加载系统词库到d2,加载用户单词到d1,调用get_difficulty_level函数进行评级;
2、使用get_difficulty_level_for_words_and_test函数给词库单词评级返回处理后的字典d2,完成之后调用simplify_the_words函数得到一个值与d2相同,键为d2中单词词干的字典d2_sim;
3、依次对用户的单词进行评级,分两类情况:
1)该单词的词干与d2_sim中的某个对应,则该单词的等级为d2_sim(单词)
2)该单词的词干与d2_sim中的每个都不符,则通过单词的频率(原先的评级方法)来评级
用户的单词评完级之后会被添加到d2中,最终返回d2

意义和缺陷:
对于apple和apples,在原先的系统中有可能会被识别为两个不同等级的词,这会导致用户或文章的等级与实际有所出入。改进单词的评级方法则可以在很大程度上降低这一风险,但只依据词根进行等级的判定在本组的方法中会导致部分单词的难度等级下降,比如某个六级单词的负数或分词形式,提取词根后与四级中的某个词一致,则该词的等级会被定为4

改进方法:
使用nltk库,还原单词为原型而不是词干能够提高准确率,但是需要添加文件,可部分添加(大概十几兆),也可完全添加(六百多兆)

工作内容: **改进用户的单词等级评价机制:** 本分支通过修改difficulty.py中的get_difficulty_level函数,将用户的单词和系统自带的单词分两次进行评级,具体的流程如下: 1、加载系统词库到d2,加载用户单词到d1,调用get_difficulty_level函数进行评级; 2、使用get_difficulty_level_for_words_and_test函数给词库单词评级返回处理后的字典d2,完成之后调用simplify_the_words函数得到一个值与d2相同,键为d2中单词词干的字典d2_sim; 3、依次对用户的单词进行评级,分两类情况: 1)该单词的词干与d2_sim中的某个对应,则该单词的等级为d2_sim(单词) 2)该单词的词干与d2_sim中的每个都不符,则通过单词的频率(原先的评级方法)来评级 用户的单词评完级之后会被添加到d2中,最终返回d2 **意义和缺陷:** 对于apple和apples,在原先的系统中有可能会被识别为两个不同等级的词,这会导致用户或文章的等级与实际有所出入。改进单词的评级方法则可以在很大程度上降低这一风险,但只依据词根进行等级的判定在本组的方法中会导致部分单词的难度等级下降,比如某个六级单词的负数或分词形式,提取词根后与四级中的某个词一致,则该词的等级会被定为4 **改进方法:** 使用nltk库,还原单词为原型而不是词干能够提高准确率,但是需要添加文件,可部分添加(大概十几兆),也可完全添加(六百多兆)
yuhuangtao added 1 commit 2023-05-11 21:32:22 +08:00
ddbce62089 1、重新对difficulty中部分函数名和变量名进行了修改,便于理解
2、对原先的词库进行了修改,原先apple和apples等词被错误收录在BBC级别里,被评为8级,现词库采用了近4500个四级词汇、2000个六级词汇、5000个考研词汇、4000个雅思词汇,此处共计7600个左右,有许多词同时具有2/3/4个标签,此外还有近九万个包括但不限于地名、人名、心理或医学等方面的词汇,比较少见,暂定等级为7
mrlan reviewed 2023-05-11 22:09:32 +08:00
@ -31,3 +38,3 @@
def get_difficulty_level(d1, d2):
def get_difficulty_level_for_words_and_tests(d_in):
Poster
Owner

@yuhuangtao

d 好于 d_in, 因为在参数列表中,一般来说都是 in 的了。请用 d

@yuhuangtao `d` 好于 `d_in`, 因为在参数列表中,一般来说都是 in 的了。请用 `d`。
yuhuangtao marked this conversation as resolved
mrlan reviewed 2023-05-11 22:11:04 +08:00
@ -51,0 +51,4 @@
d[k] = 4 # CET4 word has level 4
elif 'CET6' in d_in[k]:
d[k] = 6
elif 'IELTS' in d_in[k] or 'GRADUATE' in d_in[k]: # 雅思或研究生英语
Poster
Owner

雅思应该比考研词汇难点。

考研是 6。
雅思是 7。

雅思应该比考研词汇难点。 考研是 6。 雅思是 7。
mrlan reviewed 2023-05-11 22:12:01 +08:00
@ -51,0 +53,4 @@
d[k] = 6
elif 'IELTS' in d_in[k] or 'GRADUATE' in d_in[k]: # 雅思或研究生英语
d[k] = 8
elif 'EnWords' in d_in[k]: # 除基础词汇外的绝大多数词,包括一些犄角旮旯的专业词汇,近九万个,绝大多数我是真不认识
Poster
Owner

将 'EnWords' 改为 'OTHER',方便吗?

将 'EnWords' 改为 'OTHER',方便吗?

已修改标签名

已修改标签名
Poster
Owner

Thanks 很不错。

需要与原来的 words_and_test.p 做一个合并,而非完全替换它。

Thanks 很不错。 需要与原来的 `words_and_test.p` 做一个合并,而非完全替换它。
Poster
Owner

请看看如何把 app/static/words_and_tests.p 从分支中去除。
理由:代码仓库需要避免对二进制文件进行版本控制。

请看看如何把 `app/static/words_and_tests.p` 从分支中去除。 理由:代码仓库需要避免对二进制文件进行版本控制。

请看看如何把 app/static/words_and_tests.p 从分支中去除。
理由:代码仓库需要避免对二进制文件进行版本控制。

可以在电脑端用git面板进行合并,通过指令可以忽略此文件,使其不被合并

> 请看看如何把 `app/static/words_and_tests.p` 从分支中去除。 > 理由:代码仓库需要避免对二进制文件进行版本控制。 > > 可以在电脑端用git面板进行合并,通过指令可以忽略此文件,使其不被合并

Thanks 很不错。

需要与原来的 words_and_test.p 做一个合并,而非完全替换它。

已完成合并,目前未上传

> Thanks 很不错。 > > 需要与原来的 `words_and_test.p` 做一个合并,而非完全替换它。 > > 已完成合并,目前未上传
yuhuangtao added 1 commit 2023-05-15 09:58:48 +08:00
mrlan reviewed 2023-05-16 11:22:53 +08:00
@ -51,0 +51,4 @@
result[k] = 4 # CET4 word has level 4
elif 'CET6' in d[k] or 'GRADUATE' in d[k]:
result[k] = 6
elif 'IELTS' in d[k]: # 雅思或研究生英语
Poster
Owner

@yuhuangtao

thanks

更新注释为,去掉研究生英语

@yuhuangtao thanks 更新注释为,去掉研究生英语
mrlan reviewed 2023-05-16 11:23:33 +08:00
@ -51,0 +55,4 @@
result[k] = 7
elif 'BBC' in d[k]:
result[k] = 8
# elif 'EnWords' in d[k]: # 除基础词汇外的绝大多数词,包括一些犄角旮旯的专业词汇,近九万个,定级不太好处理,绝大多数我是真不认识
Poster
Owner

如果是 EnWords, 则难度设为 3

如果是 EnWords, 则难度设为 3
yuhuangtao marked this conversation as resolved
mrlan reviewed 2023-05-16 11:25:22 +08:00
@ -51,3 +79,3 @@
return d
def get_difficulty_level(d1, d2):
Poster
Owner

@yuhuangtao

函数重命名为 get_difficulty_level_for_user

@yuhuangtao 函数重命名为 `get_difficulty_level_for_user`
mrlan reviewed 2023-05-16 11:26:58 +08:00
@ -48,3 +40,1 @@
d[k] = min(difficulty_level_from_frequency(k, d1), d[k])
elif k in d1:
d[k] = difficulty_level_from_frequency(k, d1)
def get_difficulty_level_for_words_and_tests(d):
Poster
Owner

@yuhuangtao

函数重命名为 convert_test_type_to_difficulty_level

@yuhuangtao 函数重命名为 `convert_test_type_to_difficulty_level`
mrlan reviewed 2023-05-16 11:32:17 +08:00
@ -18,39 +19,83 @@ def load_record(pickle_fname):
def difficulty_level_from_frequency(word, d):
Poster
Owner

@yuhuangtao

这个函数有用吗?似乎可以重构(删除)掉。

@yuhuangtao 这个函数有用吗?似乎可以重构(删除)掉。

有用。我们的词库虽然很大,但仍有可能出现某单词的原型乃至词根都不在词库中的情况,该函数就被用于这种情况,即根据用户的频率给其评级

有用。我们的词库虽然很大,但仍有可能出现某单词的原型乃至词根都不在词库中的情况,该函数就被用于这种情况,即根据用户的频率给其评级
yuhuangtao added 1 commit 2023-05-16 19:02:28 +08:00
yuhuangtao added 1 commit 2023-05-18 17:00:45 +08:00
c4378e73cd 1、删除了difficulty_level_from_frequency
2、修改了get_difficulty_level_for_user,按新的方式修改了单词的评级方式:CET4 等于 level 4, OXFORD3000 等于 level 5, CET6 等于 level 6, GRADUATE 等于 level 6, OXFORD5000 等于 level 7, BBC 等于 level 8,找不到等于 level 3
mrlan reviewed 2023-05-18 18:42:44 +08:00
@ -54,0 +65,4 @@
在d2的后面添加单词没有新建一个新的字典
"""
d2 = convert_test_type_to_difficulty_level(d2) # 根据d2的标记评级{'apple': 4, 'abandon': 4, ...}
d2_simplified = simplify_the_words_dict(d2) # 提取d2的词根 {'appl': 4, 'abandon': 4, ...}
Poster
Owner

@yuhuangtao

还需调用 simplify_the_words_dict 吗? 上一行的 d2 中已经有词根了。

@yuhuangtao 还需调用 `simplify_the_words_dict` 吗? 上一行的 `d2` 中已经有词根了。

是每个单词的词根都有了吗?

是每个单词的词根都有了吗?
Poster
Owner

应该是的,见你们看板卡片 Merge pull request [44] for [EnglishPal] 附件中的 select_words_and_tests.py

在制作 d4 的时候,把词根也作为 key 存入字典中了。 d4 最后被存成 my_words_and_tests.pickle

应该是的,见你们看板卡片 Merge pull request [44] for [EnglishPal] 附件中的 select_words_and_tests.py 在制作 d4 的时候,把词根也作为 key 存入字典中了。 d4 最后被存成 my_words_and_tests.pickle
mrlan reviewed 2023-05-18 18:43:06 +08:00
@ -54,0 +24,4 @@
:return:
"""
result = {}
L = list(d.keys()) # in dic, we have test types (e.g., CET4,CET6,BBC) for each word
Poster
Owner

dic 改 d

dic 改 d
yuhuangtao marked this conversation as resolved
yuhuangtao added 1 commit 2023-05-18 20:36:43 +08:00
a83f91a88d 1、添加误删的IELTS单词标签
2、简化评级流程(快很多,几乎与网站相同)
3、删除了原先用于提取词根的函数
yuhuangtao added 1 commit 2023-05-18 21:20:33 +08:00
yuhuangtao added 91 commits 2023-05-18 21:32:01 +08:00
This pull request has changes conflicting with the target branch.
  • app/difficulty.py
  • app/static/config.yml
  • app/templates/userpage_get.html
  • requirements.txt
You can also view command line instructions.

Step 1:

From your project repository, check out a new branch and test the changes.
git checkout -b Bug476-ZhangWeiHao-YuHuangtao master
git pull origin Bug476-ZhangWeiHao-YuHuangtao

Step 2:

Merge the changes and update on Gitea.
git checkout master
git merge --no-ff Bug476-ZhangWeiHao-YuHuangtao
git push origin master
Sign in to join this conversation.
No reviewers
No Label
No Milestone
No project
No Assignees
2 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: mrlan/EnglishPal#85
There is no content yet.