gullah 0.0.1 → 0.0.2
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.
- checksums.yaml +4 -4
- data/CHANGES.md +3 -0
- data/README.md +4 -4
- data/lib/gullah/node.rb +13 -0
- data/lib/gullah/version.rb +1 -1
- data/test/parse_demo_test.rb +35 -0
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cdb5fc63d2f73407d20cfc3fdb709f27e800a1b4c4b572243e46af970d2563c6
|
4
|
+
data.tar.gz: 4803e11f42479445bc125013777e797fe526f949e1d9620bea34a974f83fd3dc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 03ad7649f31e61e78cb7220809a13e68ce6e8bdc88c497b251c36c9c5a885688bb1fd075b8d0e31e8724ee4d697446ace38cce36381a9ef1f1a2ac5c5642d334
|
7
|
+
data.tar.gz: 0d86b4e95ef0f6390cac7a47bafc45ed45e68d3bedc0524b95dd82fc2140281da3db3a380a71814f0862ca94e3b05f21634f3975a2b38eb42719254debbd03e3
|
data/CHANGES.md
CHANGED
data/README.md
CHANGED
@@ -20,11 +20,11 @@ A simple, fault-tolerant bottom-up parser written in Ruby.
|
|
20
20
|
rule :N, 'nouns'
|
21
21
|
rule :A, 'adjectives'
|
22
22
|
|
23
|
-
leaf :determiners, /\b(the|
|
23
|
+
leaf :determiners, /\b(the|an?)\b/i
|
24
24
|
leaf :nouns, /\b(cat|mat)\b/i
|
25
25
|
leaf :prepositions, /\b(on|in|around|above|beside)\b/i
|
26
26
|
leaf :verbs, /\b(sat|slept|moped)\b/
|
27
|
-
leaf :adjectives, /\b(big|small|hairy|bald)\b/i
|
27
|
+
leaf :adjectives, /\b(big|small|hairy|bald|fat)\b/i
|
28
28
|
|
29
29
|
ignore :whatever, /[^\w\s]+/
|
30
30
|
end
|
@@ -33,8 +33,8 @@ A simple, fault-tolerant bottom-up parser written in Ruby.
|
|
33
33
|
parses = Cat.parse 'The fat cat sat on the mat.'
|
34
34
|
assert_equal 1, parses.length, 'there is only one parse of this sentence'
|
35
35
|
parse = parses.first
|
36
|
-
assert_equal 1, parse.
|
37
|
-
root = parse.
|
36
|
+
assert_equal 1, parse.roots.reject(&:ignorable?).length, 'there is a root node for this parse'
|
37
|
+
root = parse.roots.reject(&:ignorable?).first
|
38
38
|
assert_equal :S, root.name, 'the root node is a sentence'
|
39
39
|
verb = root.descendants.find { |d| d.name == :VP }&.descendants&.find { |d| d.name == :V }
|
40
40
|
assert_equal 'sat', verb&.text, 'we have the expected verb'
|
data/lib/gullah/node.rb
CHANGED
@@ -7,6 +7,7 @@ module Gullah
|
|
7
7
|
# The parent node of this node, if any.
|
8
8
|
attr_reader :parent
|
9
9
|
|
10
|
+
# @private
|
10
11
|
attr_reader :rule # :nodoc:
|
11
12
|
|
12
13
|
##
|
@@ -26,6 +27,7 @@ module Gullah
|
|
26
27
|
# An alternative method for when a more telegraphic coding style is useful.
|
27
28
|
alias atts attributes
|
28
29
|
|
30
|
+
# @private
|
29
31
|
def initialize(parse, s, e, rule) # :nodoc:
|
30
32
|
@rule = rule
|
31
33
|
@leaf = rule.is_a?(Leaf) || trash?
|
@@ -100,6 +102,7 @@ module Gullah
|
|
100
102
|
end
|
101
103
|
|
102
104
|
# is this node some sort of boundary to further matching
|
105
|
+
# @private
|
103
106
|
def traversible? # :nodoc:
|
104
107
|
!(boundary? || trash? || error?)
|
105
108
|
end
|
@@ -337,6 +340,7 @@ module Gullah
|
|
337
340
|
root.descendants.select { |n| n.start >= self.end }
|
338
341
|
end
|
339
342
|
|
343
|
+
# @private
|
340
344
|
def clone # :nodoc:
|
341
345
|
super.tap do |c|
|
342
346
|
c._attributes = deep_clone(attributes)
|
@@ -416,13 +420,16 @@ module Gullah
|
|
416
420
|
## ADVISORILY PRIVATE
|
417
421
|
|
418
422
|
# :stopdoc:
|
423
|
+
# @!visibility private
|
419
424
|
|
425
|
+
# @private
|
420
426
|
def _summary=(str) # :nodoc:
|
421
427
|
@summary = str
|
422
428
|
end
|
423
429
|
|
424
430
|
# used during parsing
|
425
431
|
# make sure we don't have any repeated symbols in a unary branch
|
432
|
+
# @private
|
426
433
|
def _loop_check?(seen = nil) # :nodoc:
|
427
434
|
return true if seen == name
|
428
435
|
|
@@ -437,26 +444,32 @@ module Gullah
|
|
437
444
|
@leaf ? false : children.first._loop_check?(seen)
|
438
445
|
end
|
439
446
|
|
447
|
+
# @private
|
440
448
|
def _attributes=(attributes) # :nodoc:
|
441
449
|
@attributes = attributes
|
442
450
|
end
|
443
451
|
|
452
|
+
# @private
|
444
453
|
def _parent=(other) # :nodoc:
|
445
454
|
@parent = other
|
446
455
|
end
|
447
456
|
|
457
|
+
# @private
|
448
458
|
def _children=(children) # :nodoc:
|
449
459
|
@children = children
|
450
460
|
end
|
451
461
|
|
462
|
+
# @private
|
452
463
|
def _descendants(skip) # :nodoc:
|
453
464
|
Descendants.new(self, skip)
|
454
465
|
end
|
455
466
|
|
467
|
+
# @private
|
456
468
|
def _ancestors(skip) # :nodoc:
|
457
469
|
Ancestors.new(self, skip)
|
458
470
|
end
|
459
471
|
|
472
|
+
# @private
|
460
473
|
def _failed_test=(bool) # :nodoc:
|
461
474
|
@failed_test = bool
|
462
475
|
end
|
data/lib/gullah/version.rb
CHANGED
data/test/parse_demo_test.rb
CHANGED
@@ -30,4 +30,39 @@ class ParseDemoTest < Minitest::Test
|
|
30
30
|
assert_equal 8, parse.size
|
31
31
|
assert_equal 'S[NP[D,_ws,N],_ws,VP[V]]', parse.summary
|
32
32
|
end
|
33
|
+
|
34
|
+
class Cat
|
35
|
+
extend Gullah
|
36
|
+
|
37
|
+
rule :S, 'NP VP'
|
38
|
+
rule :NP, 'D NB'
|
39
|
+
rule :NB, 'A* N'
|
40
|
+
rule :VP, 'VP PP'
|
41
|
+
rule :VP, 'V'
|
42
|
+
rule :PP, 'P NP'
|
43
|
+
rule :P, 'prepositions'
|
44
|
+
rule :V, 'verbs'
|
45
|
+
rule :D, 'determiners'
|
46
|
+
rule :N, 'nouns'
|
47
|
+
rule :A, 'adjectives'
|
48
|
+
|
49
|
+
leaf :determiners, /\b(the|an?)\b/i
|
50
|
+
leaf :nouns, /\b(cat|mat)\b/i
|
51
|
+
leaf :prepositions, /\b(on|in|around|above|beside)\b/i
|
52
|
+
leaf :verbs, /\b(sat|slept|moped)\b/
|
53
|
+
leaf :adjectives, /\b(big|small|hairy|bald|fat)\b/i
|
54
|
+
|
55
|
+
ignore :whatever, /[^\w\s]+/
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_cat
|
59
|
+
parses = Cat.parse 'The fat cat sat on the mat.'
|
60
|
+
assert_equal 1, parses.length, 'there is only one parse of this sentence'
|
61
|
+
parse = parses.first
|
62
|
+
assert_equal 1, parse.roots.reject(&:ignorable?).length, 'there is a root node for this parse'
|
63
|
+
root = parse.roots.reject(&:ignorable?).first
|
64
|
+
assert_equal :S, root.name, 'the root node is a sentence'
|
65
|
+
verb = root.descendants.find { |d| d.name == :VP }&.descendants&.find { |d| d.name == :V }
|
66
|
+
assert_equal 'sat', verb&.text, 'we have the expected verb'
|
67
|
+
end
|
33
68
|
end
|