rwdeliza 0.03
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|