Class: Konjak::TmxSegmentor::BaseStrategy
- Inherits:
-
Object
- Object
- Konjak::TmxSegmentor::BaseStrategy
show all
- Includes:
- Mem
- Defined in:
- lib/konjak/tmx_segmentor/base_strategy.rb
Defined Under Namespace
Classes: Edge, Node
Instance Method Summary
collapse
Constructor Details
#initialize(tmx, lang, text, options = {}) ⇒ BaseStrategy
24
25
26
27
28
29
|
# File 'lib/konjak/tmx_segmentor/base_strategy.rb', line 24
def initialize(tmx, lang, text, options = {})
@tmx = tmx
@lang = lang
@text = text
@options = default_options.merge(options)
end
|
Instance Method Details
#max_cost_path ⇒ Object
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
# File 'lib/konjak/tmx_segmentor/base_strategy.rb', line 56
def max_cost_path
prev_nodes = nodes.map {|node| [node, Node::None] }.to_h
costs = nodes.map {|node| [node, node.range.size] }.to_h
edges.each do |edge|
node, node2 = edge.prev, edge.current
node2_cost = costs[node2]
new_node2_cost = costs[node] + calc_edge_cost(edge)
if node2_cost < new_node2_cost
costs[node2] = new_node2_cost
prev_nodes[node2] = node
end
end
node, _ = costs.max_by {|_, cost| cost }
Enumerator.new {|y|
loop do
break if node == Node::None
y << node
node = prev_nodes[node]
end
}.to_a.reverse
end
|
#segments ⇒ Object
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
# File 'lib/konjak/tmx_segmentor/base_strategy.rb', line 31
def segments
return [@text] if nodes.empty?
segments = []
prev_text_end = 0
prev_segment = nil
max_cost_path.each do |node|
range = node.range
segment = select_next_segment(prev_segment, node)
prev_text = @text[prev_text_end...range.begin]
segments << prev_text unless prev_text.empty?
segments << SegmentString.new(@text[range.begin, range.size], segment)
prev_segment = segment
prev_text_end = range.end
end
after_text = @text[prev_text_end..-1]
segments << after_text unless after_text.empty?
segments
end
|