2014-01-08 43 views
1

我目前正在開發一個程序,爲學生生成一個簡單的拼寫測試。它使用兩個列表分別保存拼寫和定義在拼寫測試中用Python中的不同成績標記給定的拼寫

例如

spelling = [(‘pen’, ‘chair’)] 

definitions = [(‘a writing instrument’, ‘something you can sit on’)] 

如果用戶希望通過輸入並將其添加到適當的列表中,那麼這些列表可以被程序追加。

對於如何對大部分程序進行編碼,我很確定,但我需要能夠標記學生通過輸入與列表中存儲的單詞相比輸入的答案。學生在屏幕上顯示定義(從列表中隨機選擇 - 顯示總共20個問題的測試),然後期望爲該匹配的單詞輸入適當的拼寫。然而,我堅持的部分是標記需要有所不同,相比之下他們接近正確的拼寫。如果學生得到正確的拼寫正確,應該給他們5分,如果他們得到大部分正確的小錯誤,他們會得到2分。如果他們得到重大的錯誤,他們會得到0分。

任何人都可以幫助我如何去標記拼寫嗎?我想我需要列表功能來打破這個詞,但是我不確定該從哪裏做什麼,因爲系統需要標記可以改變的單詞(因爲用戶可以從列表中添加/刪除它們)。

+0

定義「小拼寫錯誤」。 1丟失信件? 2個轉置字母?額外的信件?一旦你回答了這個問題,代碼將會很容易地遵循。 – CoryKramer

+0

我想到的比較天真的方式就是將原始拼寫與提交的拼寫進行比較,然後用'(正確的字母/總字母)* 5'作爲分數。當然,如果提交的答案與正確拼寫的字母數量不同,這將會出現問題。如果你想給一個學生做更多的功勞,比如使用不正確的元音和使用輔音,它也沒有考慮到這一點。但這至少是一個開始。 –

+0

抱歉網絡,這是一個好點!我認爲在這種情況下,我想說出一個小的拼寫錯誤,因爲任何一個字符在拼寫上與單詞拼寫錯誤相比應該是錯誤的。其他任何東西(不論是與第一個錯誤分開還是附加在一起)將是一個重大錯誤。 – user3173370

回答

0

要比較兩個序列(字符串是字符序列)並獲得彼此之間的距離,請使用SequenceMatcher from difflib及其比率()函數。你可能需要做一些測試,看看這個比例是否足夠代表你的用例,併爲你的每個標記決定一個閾值(例如在0.99到0.75之間他們得到2分,在0.75以下他們沒有得分)。

+0

雖然所有的答案都非常有用,但這似乎很適合我的需求,非常感謝您對此問題的貢獻。 – user3173370

2

Python中的Peter Norvig的spell checker可以幫助你。

我不知道人們可以給你什麼建議,因爲「大多數正確的小錯誤」規則取決於你。

但是看看Norvig的統計方法可能是有益的。

1

你需要計算的內容在學生輸入的單詞和正確的單詞之間被稱爲Levenshtein distance。在鏈接之後,您會發現該主題的充分說明,包括指向派生算法的指針,如Damerau-Levenshtein distance

除了這些標準算法之外,您可能還想考慮是否所有字符的插入,刪除和更改或swappings都將在您的應用程序中被分配相同的懲罰。例如,使用-ize代替-ise可能被認爲是次要錯誤或空錯誤等。