Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ISBN-Cleanup ist fehlerhaft #104

Open
zuphilip opened this issue Dec 7, 2018 · 4 comments
Open

ISBN-Cleanup ist fehlerhaft #104

zuphilip opened this issue Dec 7, 2018 · 4 comments

Comments

@zuphilip
Copy link
Member

zuphilip commented Dec 7, 2018

Das ISBN-Cleanup

malibu/isbn/lib.php

Lines 193 to 197 in a60b774

if (is_array($outputMap['isbn'])) {
foreach ($outputMap['isbn'] as $i => $value) {
$outputMap['isbn'][$i] = trim(preg_replace('/[^\d\s]/', '', $value));
}
}
ist noch teilweise fehlerhaft.

Beispielsweise im B3KAT stehen im Feld 540 teilweise [1, 2] auch Preisinformationen (d.h. weitere Zahlen) drin, welche nicht Teil der ISBN sind:

<feld nr="540" ind="a">ISBN 978-2-228-92164-0 22,00 EUR</feld>
<feld nr="540" ind="a">ISBN 978-3-7774-2263-3 Gb. : ca. EUR 34.90 (DE), ca. EUR 35.90 (AT), ca. sfr 45.80 (freier Pr.)</feld>

Dies führt in den Beispielen zu falschen extrahierten ISBN-Werten 9782228921640 2200 und 9783777422633 3490 3590 4580, welche auch bei der Suche nach der entsprechenden B3KAT-Id zu Fehlern führen.

[1] http://data.bib.uni-mannheim.de/malibu/isbn/b3kat.php?isbn=9782228921640
[2] http://data.bib.uni-mannheim.de/malibu/isbn/b3kat.php?isbn=978-3-7774-2263-3

@LuisMossburger
Copy link
Contributor

Könnte man vielleicht durch einen einfachen explode() lösen? Da die ISBN ja immer zuerst genannt wird also einfach:

if (is_array($outputMap['isbn'])) { 
     foreach ($outputMap['isbn'] as $i => $value) { 

         //Bei Leerzeichen trennen und ersten Teil (isbn) zurückgeben
         $outputMap['isbn'][$i] = explode(" ", $outputMap['isbn'][$i])[0];

         $outputMap['isbn'][$i] = trim(preg_replace('/[^\d\s]/', '', $value)); 

     } 
} 

@LuisMossburger
Copy link
Contributor

Vielleicht noch mit einer Überprüfung, ob überhaupt ein Preis vorhanden ist:

if (is_array($outputMap['isbn'])) {
foreach ($outputMap['isbn'] as $i => $value) {

     //Bei Leerzeichen trennen und ersten Teil (isbn) zurückgeben
     if ( strpos(" ", $outputMap['isbn'][$i]) !== false) {
            $outputMap['isbn'][$i] = explode(" ", $outputMap['isbn'][$i])[0];
    }

     $outputMap['isbn'][$i] = trim(preg_replace('/[^\d\s]/', '', $value)); 

 } 

}

@zuphilip
Copy link
Member Author

zuphilip commented Dec 7, 2018

Dies würde doch aber in den Beispielen das erste Wort, d.h. "ISBN" ergeben, oder?

Ich denke wir sollten mit einem stärkeren RegExp die (erste) ISBN aus einem String erkennen. Mal kurz nachgucken... an anderer Stelle verwende ich diesen regulären Ausdruck /\b((\d[ -]?){9}[0123456789xX]|((\d[ -]?){12}[0123456789xX]))\b/g

@LuisMossburger
Copy link
Contributor

LuisMossburger commented Dec 7, 2018

Denkfehler, entschuldigung! Das müsste dann natürlich erst nach dem preg_replace passieren, nicht vorher. Die RegExp wäre natürlich sicherer..

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants