double match - verhashte Loesung

13/01/2009 - 15:47 von Martin Trautmann | Report spam
Hallo,

gegeben sei eine erste Liste mit einzelnen IDs "n" und zugehoerigem
Inhalt "na" und "nb":

n na nb
1 1.1 1.2
2 2.1 2.2
3 3.1 3.2
...


Gegeben sei eine zweite Liste mit IDs "w", Inhalten "wx" und Referenzen
auf mehrere wn:

w wx wn
1000 abc {1,2,3,4,5}
1001 abc {5,6,7,8}
1002 cdef {1,9,10,11}
1003 abc {10,11,12}
...


Mein Problem ist nun, dass ich die Werte von n ueber w zusammenfuehren
moechte, mit folgenden Bedingungen:
- wx ist gleich
- mindestens ein n ist gleich

Im Beispiel oben passt also die Bedingung fuer w 1000 und 1001:

wx = abc AND n = 5

... Daraus moechte ich dann einen Mittelwert ueber alle na und nb fuer
abc ueber deren n = 1, 2, 3, 4, 5, 6, 7, 8 errechnen:

x xw xa xb
abc {1000,1001} avg(na) avg(nb)

Wie mache ich die Erkennung der Doppelbedingung? Mache ich dafuer
irgendwelche hashes of hashes? Oder erzeuge ich mir die Bedingung ueber
einen verketteten hash auf wie n."_".wx
1_abc
...
5_abc 1000
...
5_abc: 1000,1001

usw.?

Es geht um eine Groessenordnung von hunderttausend n, zigtausend w und
Laengen fuer wx von meist bis zu 20 Zeichen, teils auch > 100 Zeichen.

Konkret: es geht um Konvertierung von Obenstreetmap-OSM-Dateien (XML)
mit nodes und ways in ein vereinfachtes .csv-Format.

Schoenen Gruss
Martin
 

Lesen sie die antworten

#1 Slaven Rezic
18/01/2009 - 10:47 | Warnen spam
Martin Trautmann writes:

Hallo,

gegeben sei eine erste Liste mit einzelnen IDs "n" und zugehoerigem
Inhalt "na" und "nb":

n na nb
1 1.1 1.2
2 2.1 2.2
3 3.1 3.2
...


Gegeben sei eine zweite Liste mit IDs "w", Inhalten "wx" und Referenzen
auf mehrere wn:

w wx wn
1000 abc {1,2,3,4,5}
1001 abc {5,6,7,8}
1002 cdef {1,9,10,11}
1003 abc {10,11,12}
...


Mein Problem ist nun, dass ich die Werte von n ueber w zusammenfuehren
moechte, mit folgenden Bedingungen:
- wx ist gleich
- mindestens ein n ist gleich



Damit erwischt du aber nicht die gleichen Straßen, die bei
OpenStreetmap mit zwei Fahrbahnen erfasst sind, sowie gleiche Straßen
mit einer Unterbrechung.


Im Beispiel oben passt also die Bedingung fuer w 1000 und 1001:

wx = abc AND n = 5

... Daraus moechte ich dann einen Mittelwert ueber alle na und nb fuer
abc ueber deren n = 1, 2, 3, 4, 5, 6, 7, 8 errechnen:

x xw xa xb
abc {1000,1001} avg(na) avg(nb)

Wie mache ich die Erkennung der Doppelbedingung? Mache ich dafuer
irgendwelche hashes of hashes? Oder erzeuge ich mir die Bedingung ueber
einen verketteten hash auf wie n."_".wx
1_abc
...
5_abc 1000
...
5_abc: 1000,1001

usw.?



Vielleicht mit den folgenden Strukturen:

%node2ll: $node_id => $lat,$lon

%wayname2nodes2ways: $way_name => { $node_id => $way_id, ... }

%seen_way: $way_id => 1

?

Gruß,
Slaven

Slaven Rezic - slaven <at> rezic <dot> de

Visualize XML files in a Tk text widget:
http://search.cpan.org/search?mode=...p;query=Tk::XMLViewer

Ähnliche fragen