# File convertdb.rb, line 282 def parseSynsetLine( string, lineNumber, pos ) $scanner.string = string filenum, synsetType, gloss = nil, nil, nil words = [] ptrs = [] frames = [] # Parse the first part of the synset $scanner.scan( Synset ) or raise "unable to parse synset" offset, filenum, synsetType, wordCount = $scanner[1], $scanner[2], $scanner[3], $scanner[4] # Parse the words wordCount.to_i(16).times do |i| $scanner.scan( SynWord ) or raise "unable to parse word #{i}" word, lexid = $scanner[1], $scanner[2] senseKey = (offset + "%" + pos + "%" + word).downcase if !$senseIndex.key?( senseKey ) newKey = senseKey.sub( /\(\w+\)$/, '' ) if !$senseIndex.key?( newKey ) raise "Sense index does not contain sense '#{senseKey}' "\ "(tried #{newKey}, too)." end senseKey = newKey end words.push( word + "%" + $senseIndex[senseKey].to_s ) end # Parse pointers if $scanner.scan( SynPtrCnt ) $scanner[1].to_i.times do |i| $scanner.scan( SynPtr ) or raise "unable to parse synptr #{i}" ptrs.push "%s %s%%%s %s" % [ $scanner[1], $scanner[2], $scanner[3], $scanner[4], ] end else raise "Couldn't parse pointer count" end # Parse frames if this synset is a verb if synsetType == WordNet::Verb if $scanner.scan( SynFrameCnt ) $scanner[1].to_i.times do |i| $scanner.scan( SynFrame ) or raise "unable to parse frame #{i}" frames.push "#{$scanner[1]} #{$scanner[2]}" end else raise "Couldn't parse frame count" end end # Find the gloss if $scanner.scan( SynGloss ) gloss = $scanner[1].strip end # This should never happen, as the gloss matches pretty much anything to # the end of line. if !$scanner.empty? raise "Trailing miscellaneous found at end of entry" end # Build the synset entry and return it synsetType = WordNet::Adjective if synsetType == WordNet::Other key = [ offset, synsetType ].join("%") data = [ filenum, words.join( WordNet::SubDelim ), ptrs.join( WordNet::SubDelim ), frames.join( WordNet::SubDelim ), gloss, ].join( WordNet::Delim ) return key, data rescue => err message "Synset did not parse: %s at '%s...' (pos = %s, line %d)\n\t%s\n" % [ err.message, $scanner.rest[0,20], pos.inspect, lineNumber, err.backtrace[0] ] return nil end