Skip to content

Commit f7c155f

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 cd87ea4 commit f7c155f

File tree

4 files changed

+52
-1
lines changed

4 files changed

+52
-1
lines changed

classifier/scheme/street_name.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,24 @@ module.exports = [
5353
}
5454
]
5555
},
56+
{
57+
// du 4 septembre
58+
confidence: 0.5,
59+
Class: StreetNameClassification,
60+
scheme: [
61+
{
62+
is: ['StopWordClassification']
63+
},
64+
{
65+
is: ['NumericClassification'],
66+
not: ['PostcodeClassification']
67+
},
68+
{
69+
is: ['AlphaClassification'],
70+
not: ['StreetClassification', 'IntersectionClassification', 'LocalityClassification']
71+
}
72+
]
73+
},
5674
{
5775
// dos Fiéis de Deus
5876
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) {
@@ -108,7 +109,8 @@ class AddressParser extends Parser {
108109
new MustNotFollowFilter('LocalityClassification', 'RegionClassification'),
109110
new MustNotFollowFilter('LocalityClassification', 'CountryClassification'),
110111
new TokenDistanceFilter(),
111-
new SubsetFilter()
112+
new SubsetFilter(),
113+
new FillSolver()
112114
],
113115
options
114116
)

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: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,14 @@ const testcase = (test, common) => {
116116
assert(`Rue de l'Adjudant Réau Paris`, [
117117
{ street: `Rue de l'Adjudant Réau` }, { locality: 'Paris' }
118118
])
119+
120+
assert('16 Rue Des Petits Carreaux', [
121+
{ housenumber: '16' }, { street: 'Rue Des Petits Carreaux' }
122+
])
123+
124+
assert('16 Rue Des Petits Carreaux Paris', [
125+
{ housenumber: '16' }, { street: 'Rue Des Petits Carreaux' }, { locality: 'Paris' }
126+
])
119127
}
120128

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

0 commit comments

Comments
 (0)