Skip to content

Commit

Permalink
added back massTagger feature and changed stats to now also includes …
Browse files Browse the repository at this point in the history
…percentage of known morphemes weighted by frequency (field level)
  • Loading branch information
jre2 committed Dec 31, 2014
1 parent df6c545 commit f7848de
Show file tree
Hide file tree
Showing 5 changed files with 28 additions and 19 deletions.
5 changes: 4 additions & 1 deletion anki/plugins/morphman3/morph/config.py
Expand Up @@ -81,7 +81,7 @@
'JtMW': { 'enabled':True, 'set due based on mmi': False, 'ignore maturity': True },
'JSPfEC': { 'enabled':True, 'set due based on mmi': False },
'Tae Kim Cloze':{ 'enabled':True, 'set due based on mmi': False },
'Yotsubato': { 'enabled':True, 'set due based on mmi': False },
'Yotsubato': { 'enabled':True, 'set due based on mmi': True },
'Rikaisama': { 'enabled':True, 'set due based on mmi': False },
#'Kore': { 'enabled':True, 'set due based on mmi': False, 'morph_fields':[u'SentenceExpression'] },
'Kore': { 'enabled':True, 'set due based on mmi': False },
Expand All @@ -92,4 +92,7 @@
'Sentences': { 'new card merged fill':True },
'Sentences::subs2srs': { 'new card merged fill':True },
'Sentences::vn2srs': { 'new card merged fill':True },
'ExtraVocab': { 'new card merged fill':True },
'ExtraVocab::_Yotsubato': { 'new card merged fill':True },
'ExtraVocab::_Kore': { 'new card merged fill':True },
}
19 changes: 9 additions & 10 deletions anki/plugins/morphman3/morph/massTagger.py
@@ -1,30 +1,29 @@
#-*- coding: utf-8 -*-
from morphemes import getMorphemes, ms2str, MorphDb
from morphemes import getMorphemes, MorphDb
from util import addBrowserSelectionCmd, cfg, cfg1, infoMsg, QInputDialog, QFileDialog, QLineEdit
import util

def pre( b ):
def pre( b ): # :: Browser -> State
tags, ok = QInputDialog.getText( b, 'Enter tags', 'Tags', QLineEdit.Normal, 'hasMorph' )
if not ok or not tags: return
path = QFileDialog.getOpenFileName( caption='Open db', directory=util.dbsPath )
if not path: return
db = MorphDb( path )
return { 'b':b, 'db':db, 'tags':unicode(tags) }

def per( st, n ):
n.delTag( st['tags'] )

if n['k+N'] == '1': # FIXME this special but commonly wanted logic must be a cfg option
ms = getMorphemes( n['focusMorph'], None, cfg1('morph_blacklist') )
for m in ms:
def per( st, n ): # :: State -> Note -> State
#n.delTag( st['tags'] ) # clear tags if they already exist?

for field in cfg( n.mid, None, 'morph_fields' ):
for m in getMorphemes( n[ field ], None, cfg1('morph_blacklist') ):
if m in st['db'].db:
n.addTag( st['tags'] )
break

n.flush()
return st

def post( st ):
def post( st ): # :: State -> State
infoMsg( 'Tagged all notes containing morphemes in that db' )
return st

addBrowserSelectionCmd( 'Mass Tagger', pre, per, post, tooltip='Tag all cards that contain morphemes from db', shortcut=None )
22 changes: 14 additions & 8 deletions anki/plugins/morphman3/morph/stats.py
Expand Up @@ -34,20 +34,25 @@ def updateStats( knownDb=None ):

d['totalKnown'] = len( knownDb.db )

# Load Goal.*.db dbs, get total morphemes required, and compare vs known.db
# Load Goal.*.db dbs, get morphemes required, and compare vs known.db
d['goals'] = {}
goalDbPaths = glob.glob( os.path.join( cfg1('path_dbs'), 'Goal.*.db' ) )

for path in goalDbPaths:
name = os.path.basename( path )[5:][:-3]
gdb = MorphDb( path )

required = set( gdb.db.keys() )
allKnown = set( knownDb.db.keys() )

numReq = len( required )
numKnown = len( required.intersection( allKnown ) )
d['goals'][ name ] = { 'total': numReq, 'known': numKnown }
# track total unique morphemes + when weighted by frequency
# NOTE: a morpheme may occur multiple times within the same sentence, but this frequency is wrt note fields
numUniqueReq, numUniqueKnown, numFreqReq, numFreqKnown = 0, 0, 0, 0
for m,locs in gdb.db.iteritems():
numUniqueReq += 1
numFreqReq += len( locs )
if m in knownDb.db:
numUniqueKnown += 1
numFreqKnown += len( locs )

d['goals'][ name ] = { 'total':numUniqueReq, 'known':numUniqueKnown, 'freqTotal':numFreqReq, 'freqKnown':numFreqKnown }

saveStats( d )
mw.progress.finish()
Expand All @@ -61,7 +66,8 @@ def getStatsLink():
lines = []
for goalName, g in sorted( d['goals'].items() ):
#lines.append( '%s %d/%d %d%%' % ( goalName, g['known'], g['total'], 100.*g['known']/g['total'] ) )
lines.append( '%s %d%%' % ( goalName, 100.*g['known']/g['total'] ) )
#lines.append( '%s %d%%' % ( goalName, 100.*g['known']/g['total'] ) )
lines.append( '%s %d%% %d%%' % ( goalName, 100.*g['known']/g['total'], 100.*g['freqKnown']/g['freqTotal'] ) )
details = '\n'.join( lines )
return ( name, details )

Expand Down
1 change: 1 addition & 0 deletions anki/plugins/morphman3/morphman.py
Expand Up @@ -31,5 +31,6 @@ def main():
import morph.batchPlay
import morph.newMorphHelper
import morph.stats
import morph.massTagger

main()
Binary file modified anki/plugins/morphman3/morphman3.zip
Binary file not shown.

0 comments on commit f7848de

Please sign in to comment.