upd. v2 ( по методу убрал повторяющиеся слова)
напротив адреса 1 подставляется похожий адрес 2
вариант на pq
подобие можно регулировать играясь с Threshold = 0.8 (1 точно, 0 не точно)
напротив адреса 1 подставляется похожий адрес 2
вариант на pq
подобие можно регулировать играясь с Threshold = 0.8 (1 точно, 0 не точно)
| Код |
|---|
let
listReplaceText =
List.Buffer(
{
"ул.", "г.", "с.", "пр-кт.", "пом.", "зд.", "им.", "улица",
"п.", "пр-кт", "пгт.", "рп.", "пер.", "стр.", "пр-т",
"пр.", "№", "пл.", "б-р", "аул", "корпус", "ст-ца.", ",", ".", "-"
}
),
listCount = List.Count( listReplaceText ),
fTextReplace = ( srcText, step ) =>
if step < listCount
then @fTextReplace( Text.Replace( srcText, listReplaceText{ step }, "" ), step + 1 )
else srcText,
fTable = ( tableName, columnName ) => [
excelCurrentWorkbook = Excel.CurrentWorkbook( ){ [ Name = tableName ] }[ Content ],
tableSelectRows = Table.SelectRows( excelCurrentWorkbook, ( x ) => Record.Field( x, columnName ) <> null ),
tableDistinct = Table.Distinct( tableSelectRows ),
tableAddColumn =
Table.AddColumn(
tableDistinct,
columnName & "_Fix",
( x ) => [
recordField = Record.Field( x, columnName ),
textFrom = Text.From( recordField ),
textReplace = fTextReplace( textFrom , 0 )
][ textReplace ],
type text
)
][ tableAddColumn ],
tableLeft = fTable( "Table1", "Адрес 1" ),
tableRight = fTable( "Table2", "Адрес 2" ),
tableAddIndexColumn = Table.AddIndexColumn( tableLeft, "Index" ),
tableFuzzyJoin =
Table.FuzzyJoin(
tableAddIndexColumn, { "Адрес 1_Fix" },
tableRight, { "Адрес 2_Fix" },
JoinKind.LeftOuter,
[
IgnoreCase = true,
IgnoreSpace = true,
Threshold = 0.8
]
),
tableGroup =
Table.Group(
tableFuzzyJoin,
{ "Адрес 1" },
{
{
"Адрес 2",
( x ) => Text.Combine( x[Адрес 2], "#(lf)" ),
type text
},
{
"Количество адресов похожих",
( x ) => List.Count( List.RemoveNulls( x[Адрес 2] ) ),
Int64.Type
}
}
)
in
tableGroup
|
Изменено: - 28.07.2023 12:00:25