rwdeliza 0.03
Sign up to get free protection for your applications and to get access to all the features.
- data/ElizaData/database/db.1 +7015 -0
- data/ElizaData/database/db.10 +7001 -0
- data/ElizaData/database/db.11 +7001 -0
- data/ElizaData/database/db.12 +7003 -0
- data/ElizaData/database/db.13 +7003 -0
- data/ElizaData/database/db.14 +7008 -0
- data/ElizaData/database/db.15 +7001 -0
- data/ElizaData/database/db.16 +7001 -0
- data/ElizaData/database/db.17 +7001 -0
- data/ElizaData/database/db.18 +7001 -0
- data/ElizaData/database/db.19 +7001 -0
- data/ElizaData/database/db.2 +7001 -0
- data/ElizaData/database/db.20 +5467 -0
- data/ElizaData/database/db.3 +7001 -0
- data/ElizaData/database/db.4 +7001 -0
- data/ElizaData/database/db.5 +7001 -0
- data/ElizaData/database/db.6 +7001 -0
- data/ElizaData/database/db.7 +7001 -0
- data/ElizaData/database/db.8 +7001 -0
- data/ElizaData/database/db.9 +7001 -0
- data/ElizaData/responses/hello.res +1 -0
- data/ElizaData/responses/i_agree.res +1 -0
- data/ElizaData/responses/i_am_listening_to_you.res +1 -0
- data/ElizaData/responses/please_explain.res +1 -0
- data/ElizaData/responses/thank_you.res +1 -0
- data/ElizaData/tiny.dict +211 -0
- data/ElizaData/words/adjectives1.words +906 -0
- data/ElizaData/words/adjectives2w.words +1 -0
- data/ElizaData/words/noun0.words +15 -0
- data/ElizaData/words/noun1.words +1391 -0
- data/ElizaData/words/noun2.words +1924 -0
- data/ElizaData/words/noun4.words +330 -0
- data/ElizaData/words/pronoun1.words +6 -0
- data/ElizaData/words/verb4.words +350 -0
- data/ElizaData/words/verb42.words +391 -0
- data/ElizaData/words/verb42w.words +1 -0
- data/ElizaData/words/verb43.words +402 -0
- data/ElizaData/words/verb43w.words +1 -0
- data/ElizaData/words/verb45.words +452 -0
- data/ElizaData/words/verb4w.words +1 -0
- data/ElizaData/words/verb5.words +13 -0
- data/ElizaData/words/verb61.words +35 -0
- data/ElizaData/words/verb62.words +41 -0
- data/ElizaData/words/verb83.words +17 -0
- data/Readme.txt +462 -0
- data/bin/rwdeliza +19 -0
- data/code/01rwdcore/01rwdcore.rb +29 -0
- data/code/01rwdcore/02helptexthashbegin.rb +4 -0
- data/code/01rwdcore/03helptexthash.rb +23 -0
- data/code/01rwdcore/04helptextend.rb +6 -0
- data/code/01rwdcore/jumplinkcommand.rb +26 -0
- data/code/01rwdcore/openhelpwindow.rb +31 -0
- data/code/01rwdcore/returntomain.rb +10 -0
- data/code/01rwdcore/rundocuments.rb +10 -0
- data/code/01rwdcore/runeditconfiguration.rb +10 -0
- data/code/01rwdcore/runhelpabout.rb +10 -0
- data/code/01rwdcore/runopentinkerdocument.rb +7 -0
- data/code/01rwdcore/rwdtinkerversion.rb +22 -0
- data/code/01rwdcore/rwdwindowreturn.rb +9 -0
- data/code/01rwdcore/selectiontab.rb +9 -0
- data/code/01rwdcore/setuphelpaboutoptions.rb +13 -0
- data/code/01rwdcore/setuptinkerdocuments.rb +6 -0
- data/code/01rwdcore/test_cases.rb +109 -0
- data/code/01rwdcore/test_harness.rb +13 -0
- data/code/01rwdcore/uploadreturns.rb +62 -0
- data/code/dd0viewphoto/dd0viewphoto.rb +3 -0
- data/code/superant.com.rwdeliza/0uninstallapplet.rb +10 -0
- data/code/superant.com.rwdeliza/eliza01.rb +45 -0
- data/code/superant.com.rwdeliza/helptexthashrwdeliza.rb +39 -0
- data/code/superant.com.rwdeliza/openhelpwindowrwdeliza.rb +23 -0
- data/code/superant.com.rwdeliza/runrwdshellwindow.rb +12 -0
- data/code/superant.com.rwdeliza/rwdtinkerversion.rb +10 -0
- data/code/superant.com.rwdeliza/tagsentence.rb +39 -0
- data/code/superant.com.rwdtinkerbackwindow/diagnostictab.rb +19 -0
- data/code/superant.com.rwdtinkerbackwindow/helptexthashtinkerwin2.rb +61 -0
- data/code/superant.com.rwdtinkerbackwindow/initiateapplets.rb +240 -0
- data/code/superant.com.rwdtinkerbackwindow/installgemapplet.rb +34 -0
- data/code/superant.com.rwdtinkerbackwindow/installremotegem.rb +20 -0
- data/code/superant.com.rwdtinkerbackwindow/listgemdirs.rb +12 -0
- data/code/superant.com.rwdtinkerbackwindow/listgemzips.rb +53 -0
- data/code/superant.com.rwdtinkerbackwindow/listinstalledfiles.rb +12 -0
- data/code/superant.com.rwdtinkerbackwindow/listzips.rb +27 -0
- data/code/superant.com.rwdtinkerbackwindow/loadconfigurationrecord.rb +22 -0
- data/code/superant.com.rwdtinkerbackwindow/loadconfigurationvariables.rb +14 -0
- data/code/superant.com.rwdtinkerbackwindow/network.rb +87 -0
- data/code/superant.com.rwdtinkerbackwindow/openappletname.rb +19 -0
- data/code/superant.com.rwdtinkerbackwindow/openhelpwindowtinkerwin2.rb +38 -0
- data/code/superant.com.rwdtinkerbackwindow/remotegemlist.rb +24 -0
- data/code/superant.com.rwdtinkerbackwindow/removeapplet.rb +46 -0
- data/code/superant.com.rwdtinkerbackwindow/removeappletvariables.rb +52 -0
- data/code/superant.com.rwdtinkerbackwindow/runremoteinstall.rb +11 -0
- data/code/superant.com.rwdtinkerbackwindow/runrwdtinkerbackwindow.rb +15 -0
- data/code/superant.com.rwdtinkerbackwindow/rwdtinkerwin2version.rb +13 -0
- data/code/superant.com.rwdtinkerbackwindow/saveconfigurationrecord.rb +19 -0
- data/code/superant.com.rwdtinkerbackwindow/viewappletcontents.rb +22 -0
- data/code/superant.com.rwdtinkerbackwindow/viewgemappletcontents.rb +24 -0
- data/code/superant.com.words/dictlookup.rb +20 -0
- data/code/superant.com.words/runfortunewindow.rb +14 -0
- data/code/superant.com.words/runrwdwordsbackwindow.rb +10 -0
- data/code/superant.com.words/runrwdwordsversion.rb +14 -0
- data/code/superant.com.words/rwdtinkerversion.rb +10 -0
- data/code/zz0applicationend/zz0end.rb +4 -0
- data/configuration/language.dist +8 -0
- data/configuration/rwdapplicationidentity.dist +3 -0
- data/configuration/rwdtinker.dist +18 -0
- data/configuration/rwdweliza-0.03.dist +31 -0
- data/configuration/tinkerwin2variables.dist +17 -0
- data/gui/00coreguibegin/applicationguitop.rwd +4 -0
- data/gui/frontwindow0/cc0openphoto.rwd +22 -0
- data/gui/frontwindowselections/00selectiontabbegin.rwd +11 -0
- data/gui/frontwindowselections/jumplinkcommands.rwd +15 -0
- data/gui/frontwindowselections/wwselectionend.rwd +3 -0
- data/gui/frontwindowtdocuments/00documentbegin.rwd +6 -0
- data/gui/frontwindowtdocuments/tinkerdocuments.rwd +14 -0
- data/gui/frontwindowtdocuments/zzdocumentend.rwd +8 -0
- data/gui/helpaboutbegin/zzzrwdlasttab.rwd +6 -0
- data/gui/helpaboutbegin/zzzzhelpscreenstart.rwd +3 -0
- data/gui/helpaboutbegin/zzzzzzhelpabouttab.rwd +15 -0
- data/gui/helpaboutzend/helpscreenend.rwd +3 -0
- data/gui/helpaboutzend/zhelpscreenstart2.rwd +3 -0
- data/gui/helpaboutzend/zzzzhelpabout2.rwd +15 -0
- data/gui/helpaboutzend/zzzzhelpscreen2end.rwd +3 -0
- data/gui/tinkerbackwindows/superant.com.refreshwindow/fortunerefreshwindowtwo.rwd +9 -0
- data/gui/tinkerbackwindows/superant.com.rwdeliza/1appname.rwd +5 -0
- data/gui/tinkerbackwindows/superant.com.rwdeliza/1eliza.rwd +21 -0
- data/gui/tinkerbackwindows/superant.com.rwdeliza/4sentance.rwd +21 -0
- data/gui/tinkerbackwindows/superant.com.rwdeliza/98jumplinkcommands.rwd +17 -0
- data/gui/tinkerbackwindows/superant.com.rwdeliza/zbackend.rwd +6 -0
- data/gui/tinkerbackwindows/superant.com.rwdschedulebackwindow/1appname.rwd +5 -0
- data/gui/tinkerbackwindows/superant.com.rwdschedulebackwindow/20downloadftp.rwd +45 -0
- data/gui/tinkerbackwindows/superant.com.rwdschedulebackwindow/67viewconfiguration.rwd +29 -0
- data/gui/tinkerbackwindows/superant.com.rwdschedulebackwindow/70rwddiagnostics.rwd +16 -0
- data/gui/tinkerbackwindows/superant.com.rwdschedulebackwindow/m01menubegin.rwd +18 -0
- data/gui/tinkerbackwindows/superant.com.rwdschedulebackwindow/zvbackend.rwd +6 -0
- data/gui/tinkerbackwindows/superant.com.tinkerbackwindow/1appname.rwd +5 -0
- data/gui/tinkerbackwindows/superant.com.tinkerbackwindow/40rwdlistzips.rwd +41 -0
- data/gui/tinkerbackwindows/superant.com.tinkerbackwindow/45installremotezip.rwd +44 -0
- data/gui/tinkerbackwindows/superant.com.tinkerbackwindow/50rwdlistapplets.rwd +44 -0
- data/gui/tinkerbackwindows/superant.com.tinkerbackwindow/60editconfiguration.rwd +30 -0
- data/gui/tinkerbackwindows/superant.com.tinkerbackwindow/70rwddiagnostics.rwd +29 -0
- data/gui/tinkerbackwindows/superant.com.tinkerbackwindow/81jumplinkcommands.rwd +17 -0
- data/gui/tinkerbackwindows/superant.com.tinkerbackwindow/9backend.rwd +6 -0
- data/gui/tinkerbackwindows/superant.com.tinkerhelpwindow/1appname.rwd +31 -0
- data/gui/tinkerbackwindows/superant.com.tinkerhelpwindow/9end.rwd +4 -0
- data/gui/tinkerbackwindows/superant.com.versionwindow/1appname.rwd +19 -0
- data/gui/tinkerbackwindows/superant.com.versionwindow/helpaboutwindow.rwd +17 -0
- data/gui/tinkerbackwindows/superant.com.words/1appname.rwd +4 -0
- data/gui/tinkerbackwindows/superant.com.words/1dictionary.rwd +19 -0
- data/gui/tinkerbackwindows/superant.com.words/3rwdfortune.rwd +14 -0
- data/gui/tinkerbackwindows/superant.com.words/77jumplinkcommands.rwd +17 -0
- data/gui/tinkerbackwindows/superant.com.words/z9end.rwd +6 -0
- data/gui/zzcoreguiend/yy9rwdend.rwd +4 -0
- data/init.rb +277 -0
- data/installed/rwdweliza-0.03.inf +24 -0
- data/installed/temp.rb +1 -0
- data/lang/en/rwdcore/languagefile.rb +58 -0
- data/lang/es/rwdcore/languagefile-es.rb +62 -0
- data/lang/fr/rwdcore/languagefile.rb +64 -0
- data/lang/jp/rwdcore/languagefile.rb +72 -0
- data/lang/nl/rwdcore/languagefile.rb +75 -0
- data/lib/dict.rb +438 -0
- data/lib/druida.rb +499 -0
- data/lib/hashslice.rb +71 -0
- data/lib/linguistics.rb +360 -0
- data/lib/linguistics/en.rb +1601 -0
- data/lib/linguistics/en/infinitive.rb +1148 -0
- data/lib/linguistics/en/linkparser.rb +142 -0
- data/lib/linguistics/en/wordnet.rb +253 -0
- data/lib/linguistics/iso639.rb +456 -0
- data/lib/linkparser.rb +461 -0
- data/lib/linkparser/connection.rb +81 -0
- data/lib/linkparser/connector.rb +201 -0
- data/lib/linkparser/definition.rb +225 -0
- data/lib/linkparser/dictionary.rb +208 -0
- data/lib/linkparser/linkage.rb +185 -0
- data/lib/linkparser/log.rb +39 -0
- data/lib/linkparser/sentence.rb +79 -0
- data/lib/linkparser/utils.rb +540 -0
- data/lib/linkparser/word.rb +92 -0
- data/lib/rconftool.rb +380 -0
- data/lib/rwd/browser.rb +123 -0
- data/lib/rwd/ftools.rb +174 -0
- data/lib/rwd/mime.rb +328 -0
- data/lib/rwd/net.rb +866 -0
- data/lib/rwd/ruby.rb +889 -0
- data/lib/rwd/rwd.rb +1942 -0
- data/lib/rwd/sgml.rb +236 -0
- data/lib/rwd/thread.rb +63 -0
- data/lib/rwd/tree.rb +371 -0
- data/lib/rwd/xml.rb +101 -0
- data/lib/zip/ioextras.rb +114 -0
- data/lib/zip/stdrubyext.rb +111 -0
- data/lib/zip/tempfile_bugfixed.rb +195 -0
- data/lib/zip/zip.rb +1378 -0
- data/lib/zip/zipfilesystem.rb +558 -0
- data/lib/zip/ziprequire.rb +61 -0
- data/rwd_files/HowTo_Eliza.txt +195 -0
- data/rwd_files/HowTo_Tinker.txt +471 -0
- data/rwd_files/HowTo_TinkerWin2.txt +202 -0
- data/rwd_files/Readme.txt +57 -0
- data/rwd_files/RubyWebDialogs.html +6 -0
- data/rwd_files/favicon.ico +0 -0
- data/rwd_files/rdoc-style.css +175 -0
- data/rwd_files/rwdapplications.html +54 -0
- data/rwd_files/tinker.png +0 -0
- data/rwdconfig.dist +21 -0
- data/rwdeliza.rb +1 -0
- data/tests/RubyGauge.rb +179 -0
- data/tests/checkdepends.sh +4 -0
- data/tests/cleancnf.sh +6 -0
- data/tests/makedist-rwdweliza.rb +56 -0
- data/tests/makedist.rb +66 -0
- data/tests/rdep.rb +354 -0
- data/tests/totranslate.lang +93 -0
- data/zips/rwdwaddresses-1.05.zip +0 -0
- data/zips/rwdwcalc-0.61.zip +0 -0
- data/zips/rwdwgutenberg-0.09.zip +0 -0
- data/zips/rwdwschedule-1.04.zip +0 -0
- data/zips/rwdwshell-1.04.zip +0 -0
- data/zips/temp.rb +1 -0
- data/zips/wrubyslippers-1.06.zip +0 -0
- metadata +282 -0
@@ -0,0 +1,208 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
#
|
3
|
+
# dictionary.rb - this file contains the Dictionary class of the
|
4
|
+
# Ruby-LinkParser system. This governs the parsing of the dictionary files
|
5
|
+
# into their respective data structures.
|
6
|
+
#
|
7
|
+
# == Synopsis
|
8
|
+
#
|
9
|
+
# require "linkparser/dictionary"
|
10
|
+
#
|
11
|
+
# dict_opts = Hash::new('')
|
12
|
+
# dict_opts[dict] = "tiny.dict"
|
13
|
+
# dict_opts[affix] = "4.0.affix"
|
14
|
+
# dict_opts[datadir] = "/usr/local/share/linkparser"
|
15
|
+
# dict = LinkParser::Dictionary::new(dict_opts)
|
16
|
+
# puts dict['word'].to_connectors
|
17
|
+
#
|
18
|
+
# == Rcsid
|
19
|
+
#
|
20
|
+
# $Id: dictionary.rb,v 1.16 2003/08/28 04:49:34 stillflame Exp $
|
21
|
+
#
|
22
|
+
# == Authors
|
23
|
+
#
|
24
|
+
# Martin Chase <stillflame@FaerieMUD.org>
|
25
|
+
#
|
26
|
+
#:include: COPYRIGHT
|
27
|
+
#
|
28
|
+
#---
|
29
|
+
#
|
30
|
+
# Please see the file COPYRIGHT for licensing details.
|
31
|
+
#
|
32
|
+
|
33
|
+
require "forwardable"
|
34
|
+
require "rbconfig"
|
35
|
+
#require "linkparser/log"
|
36
|
+
require "linkparser/utils"
|
37
|
+
require "linkparser/definition"
|
38
|
+
|
39
|
+
class LinkParser
|
40
|
+
|
41
|
+
class Dictionary
|
42
|
+
|
43
|
+
DefaultDataDir = Config::CONFIG['datadir']
|
44
|
+
|
45
|
+
# Lots of constants for the handling of the different dictionary files.
|
46
|
+
Dict = 1
|
47
|
+
Affix = 2
|
48
|
+
Post = 3
|
49
|
+
Constituent = 4
|
50
|
+
DefaultDict = "4.0.dict"
|
51
|
+
DefaultAffix = "4.0.affix"
|
52
|
+
DefaultPost = "4.0.knowledge"
|
53
|
+
DefaultConstituent = "4.0.constituent-knowledge"
|
54
|
+
|
55
|
+
class << self
|
56
|
+
|
57
|
+
# This parses a dictionary string/file for its words and their
|
58
|
+
# definitions, returning a hash keyed by word with values being
|
59
|
+
# LinkParser::Definition objects.
|
60
|
+
def read_dict( dict, datadir = DefaultDataDir )
|
61
|
+
wordHash = {} # Hash#[] is faster than BinarySearchTree#[]
|
62
|
+
macros = [] # Array#each is faster than Hash#each
|
63
|
+
|
64
|
+
# read the dictionary file into an array of words:definition
|
65
|
+
# "statements", excluding comments.
|
66
|
+
statements = dict.gsub(/\n+|\s*%(?!\").*?\n/, " ").split(/\s*;(?!\")\s*/).compact
|
67
|
+
return nil if statements.empty?
|
68
|
+
statements.each {|statement|
|
69
|
+
words, definition = statement.split(/\s*:(?!\")\s*/)
|
70
|
+
macros.each {|macro|
|
71
|
+
definition.gsub!(macro[0], macro[1])
|
72
|
+
}
|
73
|
+
if(words =~ /<.*>/)
|
74
|
+
words.strip!
|
75
|
+
macros << [Regexp::new(words), definition]
|
76
|
+
elsif(!words or !definition)
|
77
|
+
$stderr.print "dict error #{statement}"
|
78
|
+
|
79
|
+
# raise ParseError, "Dictionary outta whack: '#{statement}'"
|
80
|
+
else
|
81
|
+
if words =~ /^\// #/
|
82
|
+
# then it's a filename, not a word, and the file will
|
83
|
+
# contain a list of words.
|
84
|
+
# Log.info("Reading in words from %s." % datadir + words)
|
85
|
+
$stderr.print "Reading in words \n"
|
86
|
+
words = File.open(datadir + words) {|f| f.read(f.stat.size)}
|
87
|
+
end
|
88
|
+
# so now we have a bunch of words and their shared
|
89
|
+
# definition. put each word into the hash with a value of
|
90
|
+
# the definition data structure.
|
91
|
+
words.gsub!(/"([^ ]+?)"/, '\1') # punctuation marks are in double-quotes
|
92
|
+
words = words.split(/\s+/)
|
93
|
+
definition = Definition::new(definition)
|
94
|
+
words.each {|word|
|
95
|
+
wordHash[word] = definition unless word.empty?
|
96
|
+
}
|
97
|
+
end
|
98
|
+
}
|
99
|
+
return wordHash
|
100
|
+
end
|
101
|
+
|
102
|
+
# This takes a filename of a dictionary, and reads it into the
|
103
|
+
# word-keyed hash.
|
104
|
+
def open_read_dict( dicttype, dictname, datadir = DefaultDataDir )
|
105
|
+
if dictname and dictname.empty?
|
106
|
+
# do nothing
|
107
|
+
return nil
|
108
|
+
else
|
109
|
+
if dictname
|
110
|
+
f = File.open( File.join(datadir, dictname) )
|
111
|
+
else
|
112
|
+
default = case dicttype
|
113
|
+
when Dict
|
114
|
+
DefaultDict
|
115
|
+
when Affix
|
116
|
+
DefaultAffix
|
117
|
+
when Post
|
118
|
+
DefaultPost
|
119
|
+
when Constituent
|
120
|
+
DefaultConstituent
|
121
|
+
end
|
122
|
+
f = File.open( File.join(datadir, default) )
|
123
|
+
end
|
124
|
+
return read_dict(f.read(f.stat.size), datadir)
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
end # class << self
|
129
|
+
|
130
|
+
extend Forwardable
|
131
|
+
|
132
|
+
# Initializes a new Dictionary object. takes a hash as its argument.
|
133
|
+
# entries:
|
134
|
+
# datadir - the directory where the dictionary files are located
|
135
|
+
# dict - the main dictionary file
|
136
|
+
# affix - the affix dictionary file
|
137
|
+
# knowledge - the post-processing dictionary file
|
138
|
+
# constituent-knowledge - the constituent knowledge dictionary file
|
139
|
+
#
|
140
|
+
# setting a value to an empty string prevents it from being used, which
|
141
|
+
# will work out fine for all but the datadir and the main dict. a value
|
142
|
+
# set to nil will mean to use the default setting.
|
143
|
+
def initialize( dict_opts )
|
144
|
+
@datadir = dict_opts['datadir'] || DefaultDataDir
|
145
|
+
|
146
|
+
@dict = Dictionary::open_read_dict( Dict,
|
147
|
+
dict_opts['dict'], @datadir )
|
148
|
+
@affix = Dictionary::open_read_dict( Affix,
|
149
|
+
dict_opts['affix'], @datadir )
|
150
|
+
@post = Dictionary::open_read_dict( Post,
|
151
|
+
dict_opts['knowledge'], @datadir )
|
152
|
+
@constituent = Dictionary::open_read_dict( Constituent,
|
153
|
+
dict_opts['constituent-knowledge'], @datadir )
|
154
|
+
end
|
155
|
+
|
156
|
+
# the directory that the dictionary files are located
|
157
|
+
attr_reader :datadir
|
158
|
+
|
159
|
+
# the main dictionary hash
|
160
|
+
attr_reader :dict
|
161
|
+
|
162
|
+
def_delegators :@dict, *(Hash.instance_methods(false))
|
163
|
+
|
164
|
+
# does affix processing on the words, which is just separating
|
165
|
+
# conjunctions and punctuation from the words they are next to.
|
166
|
+
def affix( words )
|
167
|
+
return words unless @affix
|
168
|
+
@affix.each {|punct,move|
|
169
|
+
words = words.inject([]) {|arr,ele|
|
170
|
+
if /RPUNC/.match(move.inspect) && /(.*)(#{Regexp.escape(punct)}.*)$/.match(ele)
|
171
|
+
arr << $1 << $2
|
172
|
+
elsif /LPUNC/.match(move.inspect) && /^(#{Regexp.escape(punct)})(.*)/.match(ele)
|
173
|
+
arr << $1 << $2
|
174
|
+
else
|
175
|
+
arr << ele
|
176
|
+
end
|
177
|
+
}
|
178
|
+
}
|
179
|
+
words
|
180
|
+
end
|
181
|
+
|
182
|
+
# the post-processing dictionary hash
|
183
|
+
attr_reader :post
|
184
|
+
|
185
|
+
# the constituent-knowledge dictionary hash
|
186
|
+
attr_reader :constituent
|
187
|
+
|
188
|
+
end # class Dictionary
|
189
|
+
end # module LinkParser
|
190
|
+
|
191
|
+
if $0 == __FILE__
|
192
|
+
# require 'profile'
|
193
|
+
|
194
|
+
# p LinkParser::Dictionary::read_dict("/home/stillflame/src/system-4.1/link-4.1/data/tiny.dict")["dog"]
|
195
|
+
|
196
|
+
s = <<-DICT
|
197
|
+
<macro>:(A- and {Bb+ or @C+});
|
198
|
+
<meow>:(Aa- & E+);
|
199
|
+
bar:(A- or A-) and A-;
|
200
|
+
foo:( ((A- and E-) and {Bb+ or (@C+ and De-)});% and (E+) );
|
201
|
+
word: %comment - miaow
|
202
|
+
(<meow>) | (<macro> & [@Dd- or De-]);
|
203
|
+
meow:(A+ and {B- or C-});
|
204
|
+
boo:[[[()]]];
|
205
|
+
am:((Sp- or (RS- & Bp-) or ({Q-} & SIp+)) & (((O+ or B-) & {@MV+}) or P+ or AF-));
|
206
|
+
DICT
|
207
|
+
LinkParser::Dictionary::read_dict(s).each {|k,v| puts "#{k} = #{(v).to_connectors}"}
|
208
|
+
end
|
@@ -0,0 +1,185 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
#
|
3
|
+
# linkage.rb - this file contains the class declarations for the
|
4
|
+
# LinkParser::Linkage class.
|
5
|
+
#
|
6
|
+
# == Synopsis
|
7
|
+
#
|
8
|
+
#
|
9
|
+
# == Rcsid
|
10
|
+
#
|
11
|
+
# $Id: linkage.rb,v 1.12 2003/08/10 21:56:40 stillflame Exp $
|
12
|
+
#
|
13
|
+
# == Authors
|
14
|
+
#
|
15
|
+
# Martin Chase <stillflame@FaerieMUD.org>
|
16
|
+
#
|
17
|
+
#:include: COPYRIGHT
|
18
|
+
#
|
19
|
+
#---
|
20
|
+
#
|
21
|
+
# Please see the file COPYRIGHT for licensing details.
|
22
|
+
#
|
23
|
+
|
24
|
+
require "linkparser/word"
|
25
|
+
require "linkparser/connection"
|
26
|
+
#require "linkparser/log"
|
27
|
+
|
28
|
+
class LinkParser
|
29
|
+
|
30
|
+
class Linkage
|
31
|
+
|
32
|
+
def initialize( words=[], connections=[] )
|
33
|
+
@connections = connections
|
34
|
+
@words = words
|
35
|
+
end
|
36
|
+
|
37
|
+
# the connections of this linkage
|
38
|
+
attr_reader :connections
|
39
|
+
|
40
|
+
# the words in this linkage
|
41
|
+
attr_reader :words
|
42
|
+
|
43
|
+
# Combine two linkages together.
|
44
|
+
def combine(other)
|
45
|
+
Linkage::new( @words.superimpose(other.words),
|
46
|
+
@connections + other.connections )
|
47
|
+
end
|
48
|
+
alias :+ :combine
|
49
|
+
|
50
|
+
# add new connections to the list of connections
|
51
|
+
def add_connections(*connections)
|
52
|
+
@connections += connections
|
53
|
+
self
|
54
|
+
end
|
55
|
+
alias :addConnections :add_connections
|
56
|
+
|
57
|
+
### Inserts into this linkage the connection and words found in the
|
58
|
+
### supplied arguments.
|
59
|
+
def insert(connection, left, right, left_word, right_word)
|
60
|
+
@connections << connection
|
61
|
+
if @words[left]
|
62
|
+
@words[left].combine!(left_word)
|
63
|
+
else
|
64
|
+
@words[left] = left_word
|
65
|
+
end
|
66
|
+
if @words[right]
|
67
|
+
@words[right].combine!(right_word)
|
68
|
+
else
|
69
|
+
@words[right] = right_word
|
70
|
+
end
|
71
|
+
self
|
72
|
+
end
|
73
|
+
|
74
|
+
# returns whether or not the linkage is valid
|
75
|
+
def valid?
|
76
|
+
(@connections.length + 1) >= @words.length
|
77
|
+
end
|
78
|
+
|
79
|
+
# returns whether the linkage is connected
|
80
|
+
def connected?
|
81
|
+
@words.length == @words.compact.length
|
82
|
+
end
|
83
|
+
|
84
|
+
# Hash on the only important part - the connections.
|
85
|
+
def hash
|
86
|
+
@connections.sort.hash
|
87
|
+
end
|
88
|
+
|
89
|
+
# Equality based only on the "important" parts.
|
90
|
+
def eql?(o)
|
91
|
+
@connections.sort.eql?(o.connections.sort)
|
92
|
+
end
|
93
|
+
|
94
|
+
# string display
|
95
|
+
def inspect
|
96
|
+
result = @words.collect {|word| word.to_s}.join(" ") +
|
97
|
+
" --- " + @connections.join(" ")
|
98
|
+
#:TODO: ?
|
99
|
+
end
|
100
|
+
|
101
|
+
# pretty string display
|
102
|
+
def to_s
|
103
|
+
rows = [] # the diagram
|
104
|
+
rows.unshift(@words.join(' ').split('')) # insert the words
|
105
|
+
pos = 0
|
106
|
+
starts = @words.map {|word| # the starting position of each word
|
107
|
+
start = pos
|
108
|
+
pos += word.to_s.length + 1
|
109
|
+
start
|
110
|
+
}
|
111
|
+
offsets = @words.map {|word| word.to_s.length / 2}
|
112
|
+
centers = (starts.zip(offsets)).map {|c| c[0]+c[1]} # where to attach connections to each word
|
113
|
+
pos = 0
|
114
|
+
spaces = [] # where there are spaces between words
|
115
|
+
@words.each {|word|
|
116
|
+
spaces << ((pos - 1)..(pos - 1)) if pos.nonzero?
|
117
|
+
pos += word.to_s.length + 1
|
118
|
+
}
|
119
|
+
rows.unshift(Array.new(rows[0].length, " "))
|
120
|
+
centers.each {|i| rows[0][i] = "|"}
|
121
|
+
conns = @connections.dup
|
122
|
+
until conns.empty?
|
123
|
+
row = Array.new(rows[0].length, " ")
|
124
|
+
these = []
|
125
|
+
conns.delete_if {|conn| conn.length == (rows.length - 1) and these << conn}
|
126
|
+
#:TODO: loops infinitely - need to use counter instead of rows.length
|
127
|
+
#next if these.empty?
|
128
|
+
these.each {|conn|
|
129
|
+
first = centers[conn.lword.position]
|
130
|
+
last = centers[conn.rword.position]
|
131
|
+
span = (first..last)
|
132
|
+
dist = span.to_a.length
|
133
|
+
disp = "+" + conn.to_s + "+" # minimum display string
|
134
|
+
if disp.length > dist
|
135
|
+
#:TODO: *ack*
|
136
|
+
# i will need to expand the spaces inbetween the words,
|
137
|
+
# as well as between the connection arcs, and then
|
138
|
+
# update the centers and spaces array. this could be
|
139
|
+
# done one space at a time, cycling through the possible
|
140
|
+
# word gaps.
|
141
|
+
space_affect = (spaces.index(spaces.find {|r| first <= r.first}))..(spaces.length - 1)
|
142
|
+
cent_affect = (centers.index(centers.find {|i| first <= i}))..(centers.length - 1)
|
143
|
+
until dist >= disp.length
|
144
|
+
#:?:
|
145
|
+
dist += 1
|
146
|
+
# centers.map! {|i|
|
147
|
+
# cent_affect.member?(centers.index(i)) ? i + 1 : i
|
148
|
+
# }
|
149
|
+
# first = centers[conn.lword.position]
|
150
|
+
# last = centers[conn.rword.position]
|
151
|
+
# span = (first..last)
|
152
|
+
# dist = span.to_a.length
|
153
|
+
end
|
154
|
+
elsif disp.length < dist
|
155
|
+
side = true
|
156
|
+
until disp.length >= dist
|
157
|
+
if side
|
158
|
+
disp[0] = "+-"
|
159
|
+
else
|
160
|
+
disp[-1] = "-+"
|
161
|
+
end
|
162
|
+
side = ! side
|
163
|
+
end
|
164
|
+
end
|
165
|
+
first.upto(last) do |i|
|
166
|
+
row[i] = disp.slice!(0).chr
|
167
|
+
end
|
168
|
+
}
|
169
|
+
centers.each_with_index {|i,w|
|
170
|
+
row[i] = "|" if row[i] == " " and
|
171
|
+
conns.find {|conn| [conn.rword, conn.lword].include?(@words[w])}
|
172
|
+
}
|
173
|
+
rows.unshift(row)
|
174
|
+
end
|
175
|
+
return (rows.map {|row| row.join('')}).join("\n")
|
176
|
+
end
|
177
|
+
|
178
|
+
# string conversion
|
179
|
+
def to_str
|
180
|
+
@words.join(' ')
|
181
|
+
end
|
182
|
+
|
183
|
+
end # class Linkage
|
184
|
+
|
185
|
+
end # class LinkParser
|
@@ -0,0 +1,39 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
#
|
3
|
+
# log - Sets up the logger by which the linkparser system can log itself.
|
4
|
+
#
|
5
|
+
# == Synopsis
|
6
|
+
#
|
7
|
+
#
|
8
|
+
#
|
9
|
+
# == Description
|
10
|
+
#
|
11
|
+
#
|
12
|
+
# == Author
|
13
|
+
#
|
14
|
+
# Martin Chase <stillflame@FaerieMUD.org>
|
15
|
+
#
|
16
|
+
# == Copyright
|
17
|
+
#
|
18
|
+
# Copyright (c) 2002, 2003 The FaerieMUD Consortium. All rights reserved.
|
19
|
+
#
|
20
|
+
# This module is free software. You may use, modify, and/or redistribute this
|
21
|
+
# software under the terms of the Perl Artistic License. (See
|
22
|
+
# http://language.perl.com/misc/Artistic.html)
|
23
|
+
|
24
|
+
require "log4r"
|
25
|
+
|
26
|
+
class LinkParser
|
27
|
+
|
28
|
+
include Log4r
|
29
|
+
|
30
|
+
Log = Logger::new( "LinkParser" )
|
31
|
+
Outputter.stderr.formatter =
|
32
|
+
PatternFormatter::new( :pattern => '\e[1;32m[%l] %C:\e[0m %.1024m' )
|
33
|
+
Log.outputters = Outputter.stderr
|
34
|
+
if $DEBUG
|
35
|
+
Log.level = Log4r::ALL
|
36
|
+
else
|
37
|
+
Log.level = Log4r::INFO
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
#
|
3
|
+
# sentence.rb - this file contains the class definition for the
|
4
|
+
# LinkParser::Sentence class.
|
5
|
+
#
|
6
|
+
|
7
|
+
require "forwardable"
|
8
|
+
|
9
|
+
class LinkParser
|
10
|
+
|
11
|
+
class Sentence
|
12
|
+
|
13
|
+
extend Forwardable
|
14
|
+
|
15
|
+
# initializes a new Sentence object
|
16
|
+
def initialize
|
17
|
+
@definitions = []
|
18
|
+
@linkages = []
|
19
|
+
@names = []
|
20
|
+
end
|
21
|
+
|
22
|
+
# the definitions in this sentence
|
23
|
+
attr_accessor :definitions
|
24
|
+
|
25
|
+
# the linkages of this sentence
|
26
|
+
attr_accessor :linkages
|
27
|
+
|
28
|
+
# the words in this sentence
|
29
|
+
attr_accessor :names
|
30
|
+
|
31
|
+
def_delegators :@definitions, *(Array.instance_methods(false))
|
32
|
+
|
33
|
+
def to_str
|
34
|
+
@names.join(" ")
|
35
|
+
end
|
36
|
+
|
37
|
+
def sentence?
|
38
|
+
! @linkages.empty?
|
39
|
+
end
|
40
|
+
|
41
|
+
def verb
|
42
|
+
return nil if @linkages.empty?
|
43
|
+
@linkages.find {|linkage|
|
44
|
+
vrb = linkage.connections.find {|conn|
|
45
|
+
conn.name.match(/^S/)
|
46
|
+
}
|
47
|
+
return vrb.rword if vrb
|
48
|
+
vrb = linkage.connections.find {|conn|
|
49
|
+
conn.name.match(/^O/)
|
50
|
+
}
|
51
|
+
return vrb.lword if vrb
|
52
|
+
}
|
53
|
+
return nil
|
54
|
+
end
|
55
|
+
|
56
|
+
def subject
|
57
|
+
return nil if @linkages.empty?
|
58
|
+
@linkages.find {|linkage|
|
59
|
+
subj = linkage.connections.find {|conn|
|
60
|
+
conn.name.match(/^S/)
|
61
|
+
}
|
62
|
+
return subj.lword if subj
|
63
|
+
}
|
64
|
+
return nil
|
65
|
+
end
|
66
|
+
|
67
|
+
def object
|
68
|
+
return nil if @linkages.empty?
|
69
|
+
@linkages.find {|linkage|
|
70
|
+
obj = linkage.connections.find {|conn|
|
71
|
+
conn.name.match(/^O/)
|
72
|
+
}
|
73
|
+
return obj.rword if obj
|
74
|
+
}
|
75
|
+
return nil
|
76
|
+
end
|
77
|
+
|
78
|
+
end # class Sentence
|
79
|
+
end # class LinkParser
|