Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Pobieranie stringu z DOCX / DOC / PDF
Forum PHP.pl > Forum > Przedszkole
casperii
Panowie przeglądając popularne serwisy o pracę , zauważyłem, że na podstawie uploadowanego CV uzupełnia się profil użytkownika.
Czy ktoś z obecnych phpowców jest w stanie mi wytłumaczyć z jakiej biblioteki ów serwisy korzystają ?
werdan
Daj przykład takiego serwisu.

Jesteś pewien, że to z nadesłanego pliku, a nie z powiązanego konta Linkedin lub goldenline?
casperii
praca.pl , pracuj.pl możesz stworzyć swój profil z nadesłanego pliku CV.
Już trochę rozgryzłem, doc, docx, pdf po uploadzie jest konwertowany , szukane są słowa typu imię i nazwisko "Jan Jakiś" i to jest wyciągane jako $wyciaglem[0]
tylko ,żeby "rozebrać" całe CV na interesujące nas frazy to trochę je*ania musisz zrobić
viking
To zwykły xml spakowany
batman
W przypadku docx (i innych pochodnych formatów) plik to tak naprawdę archiwum zip, które można łatwo rozpakować. W środku znajdziesz wszystkie dołączone obrazki oraz właściwą treść w postaci pliku (lub kilku plików) xml. Wystarczy wiedzieć czego i gdzie szukać i masz gotowe automatyczne uzupełnianie formularza z pliku Worda. W przypadku plików pdf, które są zwykłym skanem jest nieco więcej zabawy. Zazwyczaj robiłem to tak: przy pomocy narzędzia convert (część ImageMagic) konwertowałem pdf do pliku graficznego, a następnie przy pomocy tesseract ocr wyciągałem tekst z obrazka. Na koniec zostało przepuścić tekst przez prosty algorytm nlp i miałem wyciągnięte wszystkie dane. Nie wiem, czy tak robią w podanych przez Ciebie firmach, podejrzewam, że mają podobny workflow.
casperii
@batman możesz podać przykład ?

dla docx coś takiego znalazłem:
  1. function extractDocxText($url,$file_name){
  2. $docx = get_url($url);
  3. file_put_contents("tempf.docx",$docx);
  4. $xml_filename = "word/document.xml"; //content file name
  5. $zip_handle = new ZipArchive;
  6. $output_text = "";
  7. if(true === $zip_handle->open("tempf.docx")){
  8. if(($xml_index = $zip_handle->locateName($xml_filename)) !== false){
  9. $xml_datas = $zip_handle->getFromIndex($xml_index);
  10. //file_put_contents($input_file.".xml",$xml_datas);
  11. $replace_newlines = preg_replace('/<w:p w[0-9-Za-z]+:[a-zA-Z0-9]+="[a-zA-z"0-9 :="]+">/',"\n\r",$xml_datas);
  12. $replace_tableRows = preg_replace('/<w:tr>/',"\n\r",$replace_newlines);
  13. $replace_tab = preg_replace('/<w:tab\/>/',"\t",$replace_tableRows);
  14. $replace_paragraphs = preg_replace('/<\/w:p>/',"\n\r",$replace_tab);
  15. $replace_other_Tags = strip_tags($replace_paragraphs);
  16. $output_text = $replace_other_Tags;
  17. }else{
  18. $output_text .="";
  19. }
  20. $zip_handle->close();
  21. }else{
  22. $output_text .=" ";
  23. }
  24. chmod("tempf.docx", 0777); unlink(realpath("tempf.docx"));
  25. //save to file or echo content
  26. file_put_contents($file_name,$output_text);
  27. echo $output_text;
  28. }
  29.  
  30. print extractDocxText('link/cv.docx','test.docx');


lecz to pokazuje mi tak jak by całe CV jako 1 string ?
Czyli , że miałbym wyciągać interesujące mnie frazy i rozbijać ten string ? Bo nic innego nie przychodzi mi do głowy jak by to miało wyglądać
batman
Kiedyś opisałem na blogu jak wygląda parsowanie plików docx - https://archive.wilgucki.pl/2010/05/jak-odc...docx-w-php.html (niestety po kilku migracjach starego bloga, część zasobów zaginęła, inne wskazują na niepoprawną lokalizację, więc strona jest nieco rozjechana. Muszę to w końcu naprawić). Jest to nieco inne podejście niż w kodzie, który wkleiłeś, ale koniec końców i tak musisz przeparsować tekst, aby wyciągnąć dane. Jeśli format danych jest niezmienny, wystarczy napisać prosty parser bazujących na stałych elementach. Jeśli jednak chcesz parsować różne dokumenty, będziesz musiał pobawić się wyciąganie danych z tekstu. Z pomocą przyjdzie spaCy, bardzo prosta w użyciu biblioteka do nlp.
markuz
pdf2html
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.