Skip to content

Commit 41535f0

Browse files
committed
feat(FillSolver): Add FillSolver, it will add unclassified tokens to the street
This will be used only when StreetPrefixClassification is used. Remove Paris from regions and add cité in street_types. Paris is always used as a locality
1 parent 94c9b4a commit 41535f0

6 files changed

Lines changed: 64 additions & 1 deletion

File tree

classifier/scheme/street_name.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,24 @@ module.exports = [
3333
}
3434
]
3535
},
36+
{
37+
// du 4 septembre
38+
confidence: 0.5,
39+
Class: StreetNameClassification,
40+
scheme: [
41+
{
42+
is: ['StopWordClassification']
43+
},
44+
{
45+
is: ['NumericClassification'],
46+
not: ['PostcodeClassification']
47+
},
48+
{
49+
is: ['AlphaClassification'],
50+
not: ['StreetClassification', 'IntersectionClassification', 'LocalityClassification']
51+
}
52+
]
53+
},
3654
{
3755
// dos Fiéis de Deus
3856
confidence: 0.5,

parser/AddressParser.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ const TokenDistanceFilter = require('../solver/TokenDistanceFilter')
2929
const MustNotPreceedFilter = require('../solver/MustNotPreceedFilter')
3030
const MustNotFollowFilter = require('../solver/MustNotFollowFilter')
3131
const SubsetFilter = require('../solver/SubsetFilter')
32+
const FillSolver = require('../solver/FillSolver')
3233

3334
class AddressParser extends Parser {
3435
constructor (options) {
@@ -106,7 +107,8 @@ class AddressParser extends Parser {
106107
new MustNotFollowFilter('LocalityClassification', 'RegionClassification'),
107108
new MustNotFollowFilter('LocalityClassification', 'CountryClassification'),
108109
new TokenDistanceFilter(),
109-
new SubsetFilter()
110+
new SubsetFilter(),
111+
new FillSolver()
110112
],
111113
options
112114
)
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
cité|cite
2+
cités|cites
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# This is not used as region
2+
!paris

solver/FillSolver.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
class FillSolver {
2+
solve (tokenizer) {
3+
tokenizer.solution.forEach(solution => {
4+
// Get streets from this solution
5+
const streets = solution.pair.filter(p => p.classification.constructor.name === 'StreetClassification')
6+
// Get all nodes that are not in the solution
7+
const missings = tokenizer.section[0].graph.edges.child.filter(c => !solution.pair.some(p => p.span.intersects(c)))
8+
9+
missings.forEach(missing => {
10+
const street = streets.find(s => s.span.end === missing.start - 1)
11+
const prefix = street && street.span.graph.findOne('child:first')
12+
if (prefix && prefix.classifications.StreetPrefixClassification) {
13+
street.span.setBody(`${street.span.body} ${missing.body}`)
14+
street.span.graph.add('child', missing)
15+
street.span.graph.remove('child:last', street.span.graph.findOne('child:last'))
16+
street.span.graph.add('child:last', missing)
17+
}
18+
})
19+
})
20+
}
21+
}
22+
23+
module.exports = FillSolver

test/address.fra.test.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,22 @@ const testcase = (test, common) => {
7979
assert('Mery-Sur-Oise', [
8080
{ locality: 'Mery-Sur-Oise' }
8181
], true)
82+
83+
assert('16 Rue Des Petits Carreaux', [
84+
{ housenumber: '16' }, { street: 'Rue Des Petits Carreaux' }
85+
], true)
86+
87+
assert('16 Rue Des Petits Carreaux Paris', [
88+
{ housenumber: '16' }, { street: 'Rue Des Petits Carreaux' }, { locality: 'Paris' }
89+
], true)
90+
91+
assert('4 Cité Du Cardinal Lemoine 75005', [
92+
{ housenumber: '4' }, { street: 'Cité Du Cardinal Lemoine' }, { postcode: '75005' }
93+
], true)
94+
95+
assert('32 Rue Du 4 Septembre', [
96+
{ housenumber: '32' }, { street: 'Rue Du 4 Septembre' }
97+
], true)
8298
}
8399

84100
module.exports.all = (tape, common) => {

0 commit comments

Comments
 (0)