From 9f3f5b43e1bc79e884091593b9b8f3d6a2164ea5 Mon Sep 17 00:00:00 2001 From: ghaa0920 <1554137355@qq.com> Date: Mon, 15 May 2023 19:15:30 +0800 Subject: [PATCH 1/8] =?UTF-8?q?special=5Fcharacters=20=3D=20'\=5F=C2=A9~+/[]*&$%^@.,=3F!:;#()"=E2=80=9C=E2=80=9D=E2=80=94=E2=80=98?= =?UTF-8?q?=E2=80=99{}|'=20=E7=94=A8=E4=BA=8E=E8=BF=87=E6=BB=A4=E5=AD=97?= =?UTF-8?q?=E7=AC=A6=EF=BC=8C=E6=88=91=E5=B0=86=E5=85=B6=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E2=80=9C-=E2=80=9D=E5=88=A0=E5=8E=BB=EF=BC=8C=E4=BD=BF?= =?UTF-8?q?=E8=BF=9E=E5=AD=97=E7=AC=A6=E6=B2=A1=E6=9C=89=E8=A2=AB=E8=BF=87?= =?UTF-8?q?=E6=BB=A4=EF=BC=8C=E5=AE=9E=E7=8E=B0=E5=BD=95=E5=85=A5=E4=BE=8B?= =?UTF-8?q?=E5=A6=82fifty-six=E7=AD=89=E7=BB=84=E5=90=88=E8=AF=8D=E7=9A=84?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E3=80=82=E5=8F=A6=E5=A4=96=E5=AF=B9=E4=BA=8E?= =?UTF-8?q?=E5=88=A0=E9=99=A4=E8=BF=87=E6=BB=A4=E6=98=AF=E5=90=A6=E4=BC=9A?= =?UTF-8?q?=E5=BC=95=E5=8F=91=E5=AD=97=E7=AC=A6bug=EF=BC=8C=E7=AD=94?= =?UTF-8?q?=E6=A1=88=E6=98=AF=E8=82=AF=E5=AE=9A=E7=9A=84=EF=BC=8C=E4=BD=86?= =?UTF-8?q?=E6=98=AF=E8=BF=99=E6=AE=B5=E4=BB=A3=E7=A0=81=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E8=BF=87=E6=BB=A4=E5=AD=97=E7=AC=A6=E8=99=BD=E7=84=B6=E5=A4=9A?= =?UTF-8?q?=EF=BC=8C=E4=BD=86=E6=98=AF=E5=B9=B6=E6=B2=A1=E6=9C=89=E5=AE=8C?= =?UTF-8?q?=E5=85=A8=E8=BF=87=E6=BB=A4=E6=8E=89=E6=89=80=E6=9C=89=E5=AD=97?= =?UTF-8?q?=E7=AC=A6=EF=BC=8C=EF=BC=88=E8=BF=87=E6=BB=A4=E7=9A=84=E5=8F=AA?= =?UTF-8?q?=E6=98=AF=E9=94=AE=E7=9B=98=E4=B8=8A=E8=83=BD=E6=89=93=E5=87=BA?= =?UTF-8?q?=E7=9A=84=E5=AD=97=E7=AC=A6=EF=BC=8C=E4=B8=8D=E5=8C=85=E6=8B=AC?= =?UTF-8?q?=E8=BE=93=E5=85=A5=E6=B3=95=E4=B8=AD=E8=83=BD=E6=89=93=E5=87=BA?= =?UTF-8?q?=E7=9A=84=E7=89=B9=E6=AE=8A=E5=AD=97=E7=AC=A6=EF=BC=89=EF=BC=8C?= =?UTF-8?q?=E6=89=80=E4=BB=A5=E5=AD=97=E7=AC=A6bug=E6=9C=AC=E8=BA=AB?= =?UTF-8?q?=E5=B0=B1=E4=B8=80=E7=9B=B4=E5=AD=98=E5=9C=A8=EF=BC=8C=E6=88=91?= =?UTF-8?q?=E8=AE=A4=E4=B8=BA=E5=87=8F=E5=B0=91=E4=B8=80=E4=B8=AA=E5=AF=B9?= =?UTF-8?q?=E2=80=9C-=E2=80=9D=E5=AD=97=E7=AC=A6=E7=9A=84=E8=BF=87?= =?UTF-8?q?=E6=BB=A4=E4=B8=8D=E4=BC=9A=E9=80=A0=E6=88=90=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/wordfreqCMD.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/wordfreqCMD.py b/app/wordfreqCMD.py index c4f8a63..b112c3b 100644 --- a/app/wordfreqCMD.py +++ b/app/wordfreqCMD.py @@ -39,7 +39,7 @@ def file2str(fname):#文件转字符 def remove_punctuation(s): # 这里是s是形参 (parameter)。函数被调用时才给s赋值。 - special_characters = '\_©~<=>+-/[]*&$%^@.,?!:;#()"“”—‘’{}|' # 把里面的字符都去掉 + special_characters = '\_©~<=>+/[]*&$%^@.,?!:;#()"“”—‘’{}|' # 把里面的字符都去掉 for c in special_characters: s = s.replace(c, ' ') # 防止出现把 apple,apple 移掉逗号后变成 appleapple 情况 s = s.replace('--', ' ') From acd8db6e3e1c498650f2e8cc3021828e6132e823 Mon Sep 17 00:00:00 2001 From: ghaa0920 <1554137355@qq.com> Date: Mon, 15 May 2023 19:24:43 +0800 Subject: [PATCH 2/8] =?UTF-8?q?special=5Fcharacters=20=3D=20'\=5F=C2=A9~+/[]*&$%^@.,=3F!:;#()"=E2=80=9C=E2=80=9D=E2=80=94=E2=80=98?= =?UTF-8?q?=E2=80=99{}|'=20=E7=94=A8=E4=BA=8E=E8=BF=87=E6=BB=A4=E5=AD=97?= =?UTF-8?q?=E7=AC=A6=EF=BC=8C=E6=88=91=E5=B0=86=E5=85=B6=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E2=80=9C-=E2=80=9D=E5=88=A0=E5=8E=BB=EF=BC=8C=E4=BD=BF?= =?UTF-8?q?=E8=BF=9E=E5=AD=97=E7=AC=A6=E6=B2=A1=E6=9C=89=E8=A2=AB=E8=BF=87?= =?UTF-8?q?=E6=BB=A4=EF=BC=8C=E5=AE=9E=E7=8E=B0=E5=BD=95=E5=85=A5=E4=BE=8B?= =?UTF-8?q?=E5=A6=82fifty-six=E7=AD=89=E7=BB=84=E5=90=88=E8=AF=8D=E7=9A=84?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E3=80=82=E5=8F=A6=E5=A4=96=E5=AF=B9=E4=BA=8E?= =?UTF-8?q?=E5=88=A0=E9=99=A4=E8=BF=87=E6=BB=A4=E6=98=AF=E5=90=A6=E4=BC=9A?= =?UTF-8?q?=E5=BC=95=E5=8F=91=E5=AD=97=E7=AC=A6bug=EF=BC=8C=E7=AD=94?= =?UTF-8?q?=E6=A1=88=E6=98=AF=E8=82=AF=E5=AE=9A=E7=9A=84=EF=BC=8C=E4=BD=86?= =?UTF-8?q?=E6=98=AF=E8=BF=99=E6=AE=B5=E4=BB=A3=E7=A0=81=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E8=BF=87=E6=BB=A4=E5=AD=97=E7=AC=A6=E8=99=BD=E7=84=B6=E5=A4=9A?= =?UTF-8?q?=EF=BC=8C=E4=BD=86=E6=98=AF=E5=B9=B6=E6=B2=A1=E6=9C=89=E5=AE=8C?= =?UTF-8?q?=E5=85=A8=E8=BF=87=E6=BB=A4=E6=8E=89=E6=89=80=E6=9C=89=E5=AD=97?= =?UTF-8?q?=E7=AC=A6=EF=BC=8C=EF=BC=88=E8=BF=87=E6=BB=A4=E7=9A=84=E5=8F=AA?= =?UTF-8?q?=E6=98=AF=E9=94=AE=E7=9B=98=E4=B8=8A=E8=83=BD=E6=89=93=E5=87=BA?= =?UTF-8?q?=E7=9A=84=E5=AD=97=E7=AC=A6=EF=BC=8C=E4=B8=8D=E5=8C=85=E6=8B=AC?= =?UTF-8?q?=E8=BE=93=E5=85=A5=E6=B3=95=E4=B8=AD=E8=83=BD=E6=89=93=E5=87=BA?= =?UTF-8?q?=E7=9A=84=E7=89=B9=E6=AE=8A=E5=AD=97=E7=AC=A6=EF=BC=89=EF=BC=8C?= =?UTF-8?q?=E6=89=80=E4=BB=A5=E5=AD=97=E7=AC=A6bug=E6=9C=AC=E8=BA=AB?= =?UTF-8?q?=E5=B0=B1=E4=B8=80=E7=9B=B4=E5=AD=98=E5=9C=A8=EF=BC=8C=E6=88=91?= =?UTF-8?q?=E8=AE=A4=E4=B8=BA=E5=87=8F=E5=B0=91=E4=B8=80=E4=B8=AA=E5=AF=B9?= =?UTF-8?q?=E2=80=9C1-=E2=80=9D=E5=AD=97=E7=AC=A6=E7=9A=84=E8=BF=87?= =?UTF-8?q?=E6=BB=A4=E4=B8=8D=E4=BC=9A=E9=80=A0=E6=88=90=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/wordfreqCMD.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/wordfreqCMD.py b/app/wordfreqCMD.py index b112c3b..fb67873 100644 --- a/app/wordfreqCMD.py +++ b/app/wordfreqCMD.py @@ -39,7 +39,7 @@ def file2str(fname):#文件转字符 def remove_punctuation(s): # 这里是s是形参 (parameter)。函数被调用时才给s赋值。 - special_characters = '\_©~<=>+/[]*&$%^@.,?!:;#()"“”—‘’{}|' # 把里面的字符都去掉 + special_characters = '\_©~<=>-+/[]*&$%^@.,?!:;#()"“”—‘’{}|' # 把里面的字符都去掉 for c in special_characters: s = s.replace(c, ' ') # 防止出现把 apple,apple 移掉逗号后变成 appleapple 情况 s = s.replace('--', ' ') From 030b89706e51a35d95eb6eafa7ae2b2fefac821b Mon Sep 17 00:00:00 2001 From: ghaa0920 <1554137355@qq.com> Date: Sat, 20 May 2023 15:29:12 +0800 Subject: [PATCH 3/8] =?UTF-8?q?special=5Fcharacters=20=3D=20'\=5F=C2=A9~+/[]*&$%^@.,=3F!:;#()"=E2=80=9C=E2=80=9D=E2=80=94=E2=80=98?= =?UTF-8?q?=E2=80=99{}|'=20=E7=94=A8=E4=BA=8E=E8=BF=87=E6=BB=A4=E5=AD=97?= =?UTF-8?q?=E7=AC=A6=EF=BC=8C=E6=88=91=E5=B0=86=E5=85=B6=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E2=80=9C-=E2=80=9D=E5=88=A0=E5=8E=BB=EF=BC=8C=E4=BD=BF?= =?UTF-8?q?=E8=BF=9E=E5=AD=97=E7=AC=A6=E6=B2=A1=E6=9C=89=E8=A2=AB=E8=BF=87?= =?UTF-8?q?=E6=BB=A4=EF=BC=8C=E5=AE=9E=E7=8E=B0=E5=BD=95=E5=85=A5=E4=BE=8B?= =?UTF-8?q?=E5=A6=82fifty-six=E7=AD=89=E7=BB=84=E5=90=88=E8=AF=8D=E7=9A=84?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E3=80=82=E5=8F=A6=E5=A4=96=E5=AF=B9=E4=BA=8E?= =?UTF-8?q?=E5=88=A0=E9=99=A4=E8=BF=87=E6=BB=A4=E6=98=AF=E5=90=A6=E4=BC=9A?= =?UTF-8?q?=E5=BC=95=E5=8F=91=E5=AD=97=E7=AC=A6bug=EF=BC=8C=E7=AD=94?= =?UTF-8?q?=E6=A1=88=E6=98=AF=E8=82=AF=E5=AE=9A=E7=9A=84=EF=BC=8C=E4=BD=86?= =?UTF-8?q?=E6=98=AF=E8=BF=99=E6=AE=B5=E4=BB=A3=E7=A0=81=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E8=BF=87=E6=BB=A4=E5=AD=97=E7=AC=A6=E8=99=BD=E7=84=B6=E5=A4=9A?= =?UTF-8?q?=EF=BC=8C=E4=BD=86=E6=98=AF=E5=B9=B6=E6=B2=A1=E6=9C=89=E5=AE=8C?= =?UTF-8?q?=E5=85=A8=E8=BF=87=E6=BB=A4=E6=8E=89=E6=89=80=E6=9C=89=E5=AD=97?= =?UTF-8?q?=E7=AC=A6=EF=BC=8C=EF=BC=88=E8=BF=87=E6=BB=A4=E7=9A=84=E5=8F=AA?= =?UTF-8?q?=E6=98=AF=E9=94=AE=E7=9B=98=E4=B8=8A=E8=83=BD=E6=89=93=E5=87=BA?= =?UTF-8?q?=E7=9A=84=E5=AD=97=E7=AC=A6=EF=BC=8C=E4=B8=8D=E5=8C=85=E6=8B=AC?= =?UTF-8?q?=E8=BE=93=E5=85=A5=E6=B3=95=E4=B8=AD=E8=83=BD=E6=89=93=E5=87=BA?= =?UTF-8?q?=E7=9A=84=E7=89=B9=E6=AE=8A=E5=AD=97=E7=AC=A6=EF=BC=89=EF=BC=8C?= =?UTF-8?q?=E6=89=80=E4=BB=A5=E5=AD=97=E7=AC=A6bug=E6=9C=AC=E8=BA=AB?= =?UTF-8?q?=E5=B0=B1=E4=B8=80=E7=9B=B4=E5=AD=98=E5=9C=A8=EF=BC=8C=E6=88=91?= =?UTF-8?q?=E8=AE=A4=E4=B8=BA=E5=87=8F=E5=B0=91=E4=B8=80=E4=B8=AA=E2=80=9C?= =?UTF-8?q?-=E2=80=9D=E5=AD=97=E7=AC=A6=E5=AF=B9=E7=A8=8B=E5=BA=8F?= =?UTF-8?q?=E7=9A=84=E8=BF=87=E6=BB=A4=E8=BF=87=E7=A8=8B=E4=B8=8D=E4=BC=9A?= =?UTF-8?q?=E9=80=A0=E6=88=90=E9=97=AE=E9=A2=98=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/wordfreqCMD.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/wordfreqCMD.py b/app/wordfreqCMD.py index fb67873..b112c3b 100644 --- a/app/wordfreqCMD.py +++ b/app/wordfreqCMD.py @@ -39,7 +39,7 @@ def file2str(fname):#文件转字符 def remove_punctuation(s): # 这里是s是形参 (parameter)。函数被调用时才给s赋值。 - special_characters = '\_©~<=>-+/[]*&$%^@.,?!:;#()"“”—‘’{}|' # 把里面的字符都去掉 + special_characters = '\_©~<=>+/[]*&$%^@.,?!:;#()"“”—‘’{}|' # 把里面的字符都去掉 for c in special_characters: s = s.replace(c, ' ') # 防止出现把 apple,apple 移掉逗号后变成 appleapple 情况 s = s.replace('--', ' ') From a5c3564f15cea5ddb5f79ba15bf888a332698440 Mon Sep 17 00:00:00 2001 From: Hui Lan Date: Tue, 23 May 2023 22:22:57 +0800 Subject: [PATCH 4/8] difficulty.py: do not stem a word twice. --- app/difficulty.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/app/difficulty.py b/app/difficulty.py index 8179c57..1183999 100644 --- a/app/difficulty.py +++ b/app/difficulty.py @@ -49,15 +49,17 @@ def get_difficulty_level_for_user(d1, d2): 在d2的后面添加单词,没有新建一个新的字典 """ d2 = convert_test_type_to_difficulty_level(d2) # 根据d2的标记评级{'apple': 4, 'abandon': 4, ...} - stem = snowballstemmer.stemmer('english') + stemmer = snowballstemmer.stemmer('english') for k in d1: # 用户的词 if k in d2: # 如果用户的词以原型的形式存在于词库d2中 continue # 无需评级,跳过 - elif stem.stemWord(k) in d2: # 如果用户的词的词根存在于词库d2的词根库中 - d2[k] = d2[stem.stemWord(k)] # 按照词根进行评级 else: - d2[k] = 3 # 如果k的词根都不在,那么就当认为是3级 + stem = stemmer.stemWord(k) + if stem in d2: # 如果用户的词的词根存在于词库d2的词根库中 + d2[k] = d2[stem] # 按照词根进行评级 + else: + d2[k] = 3 # 如果k的词根都不在,那么就当认为是3级 return d2 From 67e921ba60df76640005fa2838d80808b311bc2d Mon Sep 17 00:00:00 2001 From: Hui Lan Date: Tue, 23 May 2023 22:25:40 +0800 Subject: [PATCH 5/8] difficulty.py: todo. --- app/difficulty.py | 1 + 1 file changed, 1 insertion(+) diff --git a/app/difficulty.py b/app/difficulty.py index 1183999..a8ffdee 100644 --- a/app/difficulty.py +++ b/app/difficulty.py @@ -48,6 +48,7 @@ def get_difficulty_level_for_user(d1, d2): d1 用户不会的词 在d2的后面添加单词,没有新建一个新的字典 """ + # TODO: convert_test_type_to_difficulty_level() should not be called every time. Each word's difficulty level should be pre-computed. d2 = convert_test_type_to_difficulty_level(d2) # 根据d2的标记评级{'apple': 4, 'abandon': 4, ...} stemmer = snowballstemmer.stemmer('english') From b41e1044bce3e4d9169b7743ce9aad74c0fec7d7 Mon Sep 17 00:00:00 2001 From: Hui Lan Date: Wed, 24 May 2023 10:12:44 +0800 Subject: [PATCH 6/8] difficulty.py: add some stop words, hoping that getting the next article can be faster. --- app/difficulty.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/difficulty.py b/app/difficulty.py index a8ffdee..cb93768 100644 --- a/app/difficulty.py +++ b/app/difficulty.py @@ -118,9 +118,10 @@ def text_difficulty_level(s, d): L = freq(s) lst = [] # a list of tuples, each tuple being (word, difficulty level) + stop_words = {'the':1, 'and':1, 'of':1, 'to':1, 'what':1, 'in':1, 'there':1, 'when':1, 'them':1, 'would':1, 'will':1, 'out':1, 'his':1, 'mr':1, 'that':1, 'up':1, 'more':1, 'your':1, 'it':1, 'now':1, 'very':1, 'then':1, 'could':1, 'he':1, 'any':1, 'some':1, 'with':1, 'into':1, 'you':1, 'our':1, 'man':1, 'other':1, 'time':1, 'was':1, 'than':1, 'know':1, 'about':1, 'only':1, 'like':1, 'how':1, 'see':1, 'is':1, 'before':1, 'such':1, 'little':1, 'two':1, 'its':1, 'as':1, 'these':1, 'may':1, 'much':1, 'down':1, 'for':1, 'well':1, 'should':1, 'those':1, 'after':1, 'same':1, 'must':1, 'say':1, 'first':1, 'again':1, 'us':1, 'great':1, 'where':1, 'being':1, 'come':1, 'over':1, 'good':1, 'himself':1, 'am':1, 'never':1, 'on':1, 'old':1, 'here':1, 'way':1, 'at':1, 'go':1, 'upon':1, 'have':1, 'had':1, 'without':1, 'my':1, 'day':1, 'be':1, 'but':1, 'though':1, 'from':1, 'not':1, 'too':1, 'another':1, 'this':1, 'even':1, 'still':1, 'her':1, 'yet':1, 'under':1, 'by':1, 'let':1, 'just':1, 'all':1, 'because':1, 'we':1, 'always':1, 'off':1, 'yes':1, 'so':1, 'while':1, 'why':1, 'which':1, 'me':1, 'are':1, 'or':1, 'no':1, 'if':1, 'an':1, 'also':1, 'thus':1, 'who':1, 'cannot':1, 'she':1, 'whether':1} # ignore these words while computing the artile's difficulty level for x in L: word = x[0] - if word in d: + if word not in stop_words and word in d: lst.append((word, d[word])) lst2 = sort_in_descending_order(lst) # most difficult words on top From 03ccb3527a94a3c463b4bffe24ba0f579f286d5f Mon Sep 17 00:00:00 2001 From: Xunflash Date: Thu, 25 May 2023 17:35:31 +0800 Subject: [PATCH 7/8] =?UTF-8?q?=E9=87=8D=E6=9E=84=E5=89=8D=E7=AB=AF?= =?UTF-8?q?=E9=98=85=E8=AF=BBjs=EF=BC=8C=E6=96=B0=E5=A2=9E=E9=98=85?= =?UTF-8?q?=E8=AF=BB=E5=99=A8=E5=85=A8=E5=B1=80=E5=AF=B9=E8=B1=A1=EF=BC=8C?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E7=94=9F=E8=AF=8D=E6=9C=97=E8=AF=BB=E6=8C=89?= =?UTF-8?q?=E9=92=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/static/config.yml | 2 ++ app/static/js/fillword.js | 45 +++------------------------------ app/static/js/read.js | 36 ++++++++++++++++++++++++++ app/static/js/word_operation.js | 8 ++++++ app/templates/userpage_get.html | 1 + 5 files changed, 51 insertions(+), 41 deletions(-) create mode 100644 app/static/js/read.js diff --git a/app/static/config.yml b/app/static/config.yml index 20aa396..7b2b3eb 100644 --- a/app/static/config.yml +++ b/app/static/config.yml @@ -7,7 +7,9 @@ css: js: head: # 在页面加载之前加载 - static/js/jquery.js + - static/js/read.js - static/js/word_operation.js + bottom: # 在页面加载完之后加载 - static/js/fillword.js - static/js/highlight.js diff --git a/app/static/js/fillword.js b/app/static/js/fillword.js index ba249dd..b967633 100644 --- a/app/static/js/fillword.js +++ b/app/static/js/fillword.js @@ -1,9 +1,5 @@ let isRead = true; let isChoose = true; -let reader = window.speechSynthesis; // 全局定义朗读者,以便朗读和暂停 -let current_position = 0; // 朗读文本的当前位置 -let original_position = 0; // 朗读文本的初始位置 -let to_speak = ""; // 朗读的初始内容 function getWord() { return window.getSelection ? window.getSelection() : document.selection.createRange().text; @@ -11,7 +7,7 @@ function getWord() { function fillInWord() { let word = getWord(); - if (isRead) read(word); + if (isRead) Reader.read(word, inputSlider.value); if (!isChoose) return; const element = document.getElementById("selected-words"); element.value = element.value + " " + word; @@ -19,50 +15,17 @@ function fillInWord() { document.getElementById("text-content").addEventListener("click", fillInWord, false); -function makeUtterance(str, rate) { - let msg = new SpeechSynthesisUtterance(str); - msg.rate = rate; - msg.lang = "en-US"; // TODO: add language options menu - msg.onboundary = ev => { - if (ev.name == "word") { - current_position = ev.charIndex; - } - } - return msg; -} - -const sliderValue = document.getElementById("rangeValue"); // 显示值 -const inputSlider = document.getElementById("rangeComponent"); // 滑块元素 +const sliderValue = document.getElementById("rangeValue"); +const inputSlider = document.getElementById("rangeComponent"); inputSlider.oninput = () => { - let value = inputSlider.value; // 获取滑块的值 + let value = inputSlider.value; sliderValue.textContent = value + '×'; - if (!reader.speaking) return; - reader.cancel(); - let msg = makeUtterance(to_speak.substring(original_position + current_position), value); - original_position = original_position + current_position; - current_position = 0; - reader.speak(msg); }; -function read(s) { - to_speak = s.toString(); - original_position = 0; - current_position = 0; - let msg = makeUtterance(to_speak, inputSlider.value); - reader.speak(msg); -} - function onReadClick() { isRead = !isRead; - if (!isRead) { - reader.cancel(); - } } function onChooseClick() { isChoose = !isChoose; } - -function stopRead() { - reader.cancel(); -} \ No newline at end of file diff --git a/app/static/js/read.js b/app/static/js/read.js new file mode 100644 index 0000000..83c18fb --- /dev/null +++ b/app/static/js/read.js @@ -0,0 +1,36 @@ +// read.js +var Reader = (function() { + let reader = window.speechSynthesis; + let current_position = 0; + let original_position = 0; + let to_speak = ""; + + function makeUtterance(str, rate) { + let msg = new SpeechSynthesisUtterance(str); + msg.rate = rate; + msg.lang = "en-US"; + msg.onboundary = ev => { + if (ev.name == "word") { + current_position = ev.charIndex; + } + } + return msg; + } + + function read(s, rate) { + to_speak = s.toString(); + original_position = 0; + current_position = 0; + let msg = makeUtterance(to_speak, rate); + reader.speak(msg); + } + + function stopRead() { + reader.cancel(); + } + + return { + read: read, + stopRead: stopRead + }; +})(); diff --git a/app/static/js/word_operation.js b/app/static/js/word_operation.js index ea6a6e8..f043cce 100644 --- a/app/static/js/word_operation.js +++ b/app/static/js/word_operation.js @@ -62,6 +62,13 @@ function delete_word(theWord) { }); } +function read_word(theWord) { + let to_speak = $("#word_" + theWord).text(); + original_position = 0; + current_position = 0; + Reader.read(to_speak, inputSlider.value); +} + /* * interface Word { * word: string, @@ -95,6 +102,7 @@ function wordTemplate(word) { 熟悉 不熟悉 删除 + 朗读

`; } diff --git a/app/templates/userpage_get.html b/app/templates/userpage_get.html index b5e16aa..0f3c720 100644 --- a/app/templates/userpage_get.html +++ b/app/templates/userpage_get.html @@ -131,6 +131,7 @@ 熟悉 不熟悉 删除 + 朗读

{% endfor %} From c6bf323c6084255abcde0c47ae1a0504bd372475 Mon Sep 17 00:00:00 2001 From: Xunflash Date: Thu, 25 May 2023 21:23:25 +0800 Subject: [PATCH 8/8] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/static/js/read.js | 1 - 1 file changed, 1 deletion(-) diff --git a/app/static/js/read.js b/app/static/js/read.js index 83c18fb..814f627 100644 --- a/app/static/js/read.js +++ b/app/static/js/read.js @@ -1,4 +1,3 @@ -// read.js var Reader = (function() { let reader = window.speechSynthesis; let current_position = 0;