Fixed for consistent test results. (hopefully...)

pull/1/head
Yusuke Shinyama 2014-06-26 17:41:31 +09:00
parent fe86b4e64e
commit 2e900e5d10
4 changed files with 33 additions and 18 deletions

View File

@ -81,6 +81,16 @@ class LTComponent(LTItem):
return ('<%s %s>' % return ('<%s %s>' %
(self.__class__.__name__, bbox2str(self.bbox))) (self.__class__.__name__, bbox2str(self.bbox)))
# Disable comparison.
def __lt__(self, _):
raise ValueError
def __le__(self, _):
raise ValueError
def __gt__(self, _):
raise ValueError
def __ge__(self, _):
raise ValueError
def set_bbox(self, bbox): def set_bbox(self, bbox):
(x0, y0, x1, y1) = bbox (x0, y0, x1, y1) = bbox
self.x0 = x0 self.x0 = x0
@ -609,6 +619,10 @@ class LTLayoutContainer(LTContainer):
y1 = max(obj1.y1, obj2.y1) y1 = max(obj1.y1, obj2.y1)
objs = set(plane.find((x0, y0, x1, y1))) objs = set(plane.find((x0, y0, x1, y1)))
return objs.difference((obj1, obj2)) return objs.difference((obj1, obj2))
def key_obj(t):
(c,d,_,_) = t
return (c,d)
# XXX this still takes O(n^2) :( # XXX this still takes O(n^2) :(
dists = [] dists = []
@ -618,7 +632,7 @@ class LTLayoutContainer(LTContainer):
obj2 = boxes[j] obj2 = boxes[j]
dists.append((0, dist(obj1, obj2), obj1, obj2)) dists.append((0, dist(obj1, obj2), obj1, obj2))
# We could use dists.sort(), but it would randomize the test result. # We could use dists.sort(), but it would randomize the test result.
dists = csort(dists) dists = csort(dists, key=key_obj)
plane = Plane(self.bbox) plane = Plane(self.bbox)
plane.extend(boxes) plane.extend(boxes)
while dists: while dists:
@ -633,10 +647,11 @@ class LTLayoutContainer(LTContainer):
group = LTTextGroupLRTB([obj1, obj2]) group = LTTextGroupLRTB([obj1, obj2])
plane.remove(obj1) plane.remove(obj1)
plane.remove(obj2) plane.remove(obj2)
dists = [ n for n in dists if (n[2] in plane and n[3] in plane) ] dists = [ (c,d,obj1,obj2) for (c,d,obj1,obj2) in dists
if (obj1 in plane and obj2 in plane) ]
for other in plane: for other in plane:
dists.append((0, dist(group, other), group, other)) dists.append((0, dist(group, other), group, other))
dists = csort(dists) dists = csort(dists, key=key_obj)
plane.add(group) plane.add(group)
assert len(plane) == 1 assert len(plane) == 1
return list(plane) return list(plane)

View File

@ -104,7 +104,7 @@ def uniq(objs):
# csort # csort
def csort(objs, key=lambda x: x): def csort(objs, key):
"""Order-preserving sorting function.""" """Order-preserving sorting function."""
idxs = dict((obj, i) for (i, obj) in enumerate(objs)) idxs = dict((obj, i) for (i, obj) in enumerate(objs))
return sorted(objs, key=lambda obj: (key(obj), idxs[obj])) return sorted(objs, key=lambda obj: (key(obj), idxs[obj]))

View File

@ -269,9 +269,9 @@
<br>Taxable amount (see page 13) <br>Taxable amount (see page 13)
<br></span><span style="font-family: HelveticaNeue-Roman; font-size:10px"> <br></span><span style="font-family: HelveticaNeue-Roman; font-size:10px">
<br></span></div><div style="position:absolute; border: textbox 1px solid; writing-mode:lr-tb; left:358px; top:642px; width:10px; height:11px;"><span style="font-family: HelveticaNeue-Bold; font-size:10px">22 <br></span></div><div style="position:absolute; border: textbox 1px solid; writing-mode:lr-tb; left:358px; top:642px; width:10px; height:11px;"><span style="font-family: HelveticaNeue-Bold; font-size:10px">22
<br></span></div><div style="position:absolute; border: textbox 1px solid; writing-mode:lr-tb; left:296px; top:644px; width:2px; height:10px;"><span style="font-family: HelveticaNeue-Roman; font-size:10px">
<br></span></div><div style="position:absolute; border: textbox 1px solid; writing-mode:lr-tb; left:206px; top:631px; width:2px; height:10px;"><span style="font-family: HelveticaNeue-Roman; font-size:10px">
<br></span></div><div style="position:absolute; border: textbox 1px solid; writing-mode:lr-tb; left:184px; top:595px; width:2px; height:10px;"><span style="font-family: HelveticaNeue-Roman; font-size:10px"> <br></span></div><div style="position:absolute; border: textbox 1px solid; writing-mode:lr-tb; left:184px; top:595px; width:2px; height:10px;"><span style="font-family: HelveticaNeue-Roman; font-size:10px">
<br></span></div><div style="position:absolute; border: textbox 1px solid; writing-mode:lr-tb; left:206px; top:631px; width:2px; height:10px;"><span style="font-family: HelveticaNeue-Roman; font-size:10px">
<br></span></div><div style="position:absolute; border: textbox 1px solid; writing-mode:lr-tb; left:296px; top:644px; width:2px; height:10px;"><span style="font-family: HelveticaNeue-Roman; font-size:10px">
<br></span></div><div style="position:absolute; border: textbox 1px solid; writing-mode:lr-tb; left:308px; top:691px; width:2px; height:10px;"><span style="font-family: HelveticaNeue-Roman; font-size:10px"> <br></span></div><div style="position:absolute; border: textbox 1px solid; writing-mode:lr-tb; left:308px; top:691px; width:2px; height:10px;"><span style="font-family: HelveticaNeue-Roman; font-size:10px">
<br></span></div><div style="position:absolute; border: textbox 1px solid; writing-mode:lr-tb; left:241px; top:703px; width:2px; height:10px;"><span style="font-family: HelveticaNeue-Roman; font-size:10px"> <br></span></div><div style="position:absolute; border: textbox 1px solid; writing-mode:lr-tb; left:241px; top:703px; width:2px; height:10px;"><span style="font-family: HelveticaNeue-Roman; font-size:10px">
<br></span></div><div style="position:absolute; border: textbox 1px solid; writing-mode:lr-tb; left:150px; top:474px; width:2px; height:10px;"><span style="font-family: HelveticaNeue-Roman; font-size:10px"> <br></span></div><div style="position:absolute; border: textbox 1px solid; writing-mode:lr-tb; left:150px; top:474px; width:2px; height:10px;"><span style="font-family: HelveticaNeue-Roman; font-size:10px">

View File

@ -4976,9 +4976,9 @@
</text> </text>
</textline> </textline>
</textbox> </textbox>
<textbox id="90" bbox="296.198,186.896,298.700,197.390"> <textbox id="90" bbox="184.848,236.096,187.350,246.590">
<textline bbox="296.198,186.896,298.700,197.390"> <textline bbox="184.848,236.096,187.350,246.590">
<text font="HelveticaNeue-Roman" bbox="296.198,186.896,298.700,197.390" size="10.494"> </text> <text font="HelveticaNeue-Roman" bbox="184.848,236.096,187.350,246.590" size="10.494"> </text>
<text> <text>
</text> </text>
</textline> </textline>
@ -4990,9 +4990,9 @@
</text> </text>
</textline> </textline>
</textbox> </textbox>
<textbox id="92" bbox="184.848,236.096,187.350,246.590"> <textbox id="92" bbox="296.198,186.896,298.700,197.390">
<textline bbox="184.848,236.096,187.350,246.590"> <textline bbox="296.198,186.896,298.700,197.390">
<text font="HelveticaNeue-Roman" bbox="184.848,236.096,187.350,246.590" size="10.494"> </text> <text font="HelveticaNeue-Roman" bbox="296.198,186.896,298.700,197.390" size="10.494"> </text>
<text> <text>
</text> </text>
</textline> </textline>
@ -5876,8 +5876,8 @@
<textbox id="60" bbox="413.528,513.859,415.057,520.272" /> <textbox id="60" bbox="413.528,513.859,415.057,520.272" />
<textgroup bbox="56.488,466.640,424.248,586.390"> <textgroup bbox="56.488,466.640,424.248,586.390">
<textgroup bbox="56.488,466.640,424.248,586.390"> <textgroup bbox="56.488,466.640,424.248,586.390">
<textbox id="61" bbox="350.398,549.316,352.900,559.810" />
<textgroup bbox="56.488,466.640,424.248,586.390"> <textgroup bbox="56.488,466.640,424.248,586.390">
<textbox id="61" bbox="350.398,549.316,352.900,559.810" />
<textgroup bbox="56.488,466.640,424.248,586.390"> <textgroup bbox="56.488,466.640,424.248,586.390">
<textbox id="62" bbox="331.508,510.196,335.504,551.268" /> <textbox id="62" bbox="331.508,510.196,335.504,551.268" />
<textgroup bbox="56.488,466.640,424.248,586.390"> <textgroup bbox="56.488,466.640,424.248,586.390">
@ -5891,8 +5891,8 @@
<textbox id="66" bbox="324.578,468.892,375.076,477.355" /> <textbox id="66" bbox="324.578,468.892,375.076,477.355" />
</textgroup> </textgroup>
</textgroup> </textgroup>
<textbox id="67" bbox="219.218,537.266,221.720,547.760" />
</textgroup> </textgroup>
<textbox id="67" bbox="219.218,537.266,221.720,547.760" />
</textgroup> </textgroup>
<textbox id="68" bbox="90.478,470.395,92.841,480.306" /> <textbox id="68" bbox="90.478,470.395,92.841,480.306" />
</textgroup> </textgroup>
@ -5932,11 +5932,11 @@
<textgroup bbox="85.308,26.338,451.829,403.890"> <textgroup bbox="85.308,26.338,451.829,403.890">
<textgroup bbox="85.308,26.338,451.829,403.890"> <textgroup bbox="85.308,26.338,451.829,403.890">
<textgroup bbox="85.308,26.338,451.829,403.890"> <textgroup bbox="85.308,26.338,451.829,403.890">
<textgroup bbox="85.308,26.338,451.829,403.890">
<textbox id="79" bbox="318.048,103.606,320.550,114.100" /> <textbox id="79" bbox="318.048,103.606,320.550,114.100" />
<textgroup bbox="85.308,26.338,451.829,403.890"> <textgroup bbox="85.308,26.338,451.829,403.890">
<textgroup bbox="85.308,26.338,451.829,403.890"> <textgroup bbox="85.308,26.338,451.829,403.890">
<textgroup bbox="85.308,26.338,451.829,403.890"> <textgroup bbox="85.308,26.338,451.829,403.890">
<textgroup bbox="85.308,26.338,451.829,403.890">
<textbox id="80" bbox="435.798,224.046,438.300,234.540" /> <textbox id="80" bbox="435.798,224.046,438.300,234.540" />
<textgroup bbox="85.308,26.338,451.829,403.890"> <textgroup bbox="85.308,26.338,451.829,403.890">
<textgroup bbox="85.308,26.338,451.829,403.890"> <textgroup bbox="85.308,26.338,451.829,403.890">
@ -5964,16 +5964,16 @@
<textbox id="89" bbox="358.438,188.100,368.446,199.737" /> <textbox id="89" bbox="358.438,188.100,368.446,199.737" />
</textgroup> </textgroup>
</textgroup> </textgroup>
<textbox id="90" bbox="296.198,186.896,298.700,197.390" /> <textbox id="90" bbox="184.848,236.096,187.350,246.590" />
</textgroup> </textgroup>
</textgroup> </textgroup>
<textbox id="91" bbox="206.988,199.946,209.490,210.440" /> <textbox id="91" bbox="206.988,199.946,209.490,210.440" />
</textgroup> </textgroup>
<textbox id="92" bbox="184.848,236.096,187.350,246.590" /> <textbox id="92" bbox="296.198,186.896,298.700,197.390" />
</textgroup>
</textgroup> </textgroup>
<textbox id="93" bbox="308.058,139.676,310.560,150.170" /> <textbox id="93" bbox="308.058,139.676,310.560,150.170" />
</textgroup> </textgroup>
</textgroup>
<textbox id="94" bbox="241.188,127.706,243.690,138.200" /> <textbox id="94" bbox="241.188,127.706,243.690,138.200" />
</textgroup> </textgroup>
<textbox id="95" bbox="150.918,356.586,153.420,367.080" /> <textbox id="95" bbox="150.918,356.586,153.420,367.080" />