Jak stworzyć bazę danych artykułów Młodego Technika?

Czyli miejsce, w którym można poruszać tematy nie dające przyporządkować się do pozostałych działów ale uwaga tutaj również obowiązują przyjęte zasady na forum
ODPOWIEDZ
Awatar użytkownika
Syzyf
-
Posty: 24
Rejestracja: 15 sty 2010, 10:54
Lokalizacja: Polska

Jak stworzyć bazę danych artykułów Młodego Technika?

Post autor: Syzyf » 14 wrz 2012, 21:26

Zapewne większości Forumowiczów czasopismo "Młody Technik" nie jest obce. Archiwalne numery zawierają wiele ciekawych artykułów, ale problemem jest wyszukanie interesujących nas w danej chwili tematów, tzn. w którym numerze o tym pisano.
Na Forum MT pojawiła się inicjatywa (KLIK) stworzenia jakiejś formy łatwego wyszukiwania tematów albo przeglądania spisów treści z poszczególnych lat.
Mamy zamiar zeskanować spisy treści a potem przetworzyć je w programie OCR na postać tekstową.
Ale pytanie: co dalej z tym zrobić? Jak z takich plików tekstowych stworzyć sensowną bazę danych, która umożliwi wyszukiwanie np. pojedynczych słów z tytułów, słów kluczowych itp.
Obecnie na stronie MT są dostępne skany archiwalnych artykułów z działu "Na Warsztacie" z lat 1956-1995 i mają być uzupełniane o kolejne. Także na Forum MT będą się pojawiały skany archiwalnych artykułów z innych działów, robione przez jednego z kolegów.
Ale wcześniej trzeba umieć je odnaleźć i stąd pomysł zrobienia czegoś, co ułatwi wyszukiwanie.
Można by to zrobić w prostej postaci wykazu numerów, z których można dotrzeć do spisu treści.
Przykład takiej formy: http://www.fonar.com.pl/audio/czasopism ... ndex_g.htm
Jednak ona nie umożliwia wyszukiwania - trzeba zajrzeć do każdego numeru aby coś znaleźć.

Mam więc prośbę dla osób zorientowanych w temacie baz danych o wskazówki. Nie jestem informatykiem, mam tylko ogólne pojęcie o relacyjnych bazach danych.
Chodzi o coś takiego: z zeskanowanych spisów treści tworzymy "coś", np. bazę zawierającą rekordy o określonych polach np.: rok, nr, tytuł artykułu, strona, typ artykułu (słowo kluczowe: np. Na Warsztacie, Klub Wynalazców itp.), drugie słowo kluczowe, link do skanu, uwagi dodatkowe.
Taka baza byłaby potem "pożywką", aby z poziomu przeglądarki www można było wyszukiwać informacje. Zapewne trzeba by do tego napisać jakiś skrypt, który zapewni wyszukiwanie informacji - nie mam o tym pojęcia, ale załóżmy, że ktoś to napisze.
Docelowo taka baza może mieć spory rozmiar, bo MT wydawany jest od 60 lat, co przy 12 numerach w roku daje ok. 700 spisów treści. Każdy spis, to ok. 30 artykułów, czyli razem ok. 20000 rekordów.
Na chwilę obecną interesuje nas stworzenie samej bazy: jaką ona powinna mieć formę, aby była uniwersalna, prosta do zrobienia i uzupełniania. Mógłbym np. importować spis treści (plik TXT po programie OCR) do Excela (1 wiersz = 1 pozycja spisu treści) i potem stworzyć dodatkowe pola - powstałaby baza dotycząca pojedynczego numeru.
Potem łączyć numery w roczniki itd. Dalej można taki plik np. wyeksportować do formatu CSV.
Nie wiem, jednak czy taki plik CSV będzie odpowiedni dla skryptu przeglądarki. Może trzeba się do tego zabrać w całkiem inny sposób?
Jak to zrobić z sensem?
Proszę o podpowiedzi i z góry dziękuję :smile:

Awatar użytkownika
c4r0
Moderator
Posty: 2150
Rejestracja: 13 kwie 2004, 19:56
Lokalizacja: z lasu
Kontakt:

Post autor: c4r0 » 14 wrz 2012, 22:36

Można taką bazę stworzyć w MySQL i napisać do niej prosty skrypcik w PhP. Jest to zadanie na poziomie projektu z przedmiotu "bzy danych" na początku studiów informatycznych, czyli dla kogoś kto w przeszłości liznął tworzenie stron internetowych nie powinien to być problem. Trudniejsze będzie pewnie spowodowanie jakoś, żeby te zeskanowane spisy treści zamieniły się w dane w bazie :) Bazy danych MySQL są ogólnie dostępne na serwerach więc nie ma sensu trzymać danych w pliku CSV. Może natomiast okazać się że stworzenie najpierw pliku a potem jego import do bazy byłoby sensownym podejściem.

Awatar użytkownika
Syzyf
-
Posty: 24
Rejestracja: 15 sty 2010, 10:54
Lokalizacja: Polska

Post autor: Syzyf » 16 wrz 2012, 7:40

Dziękuję za pierwszą podpowiedź :grin: - skieruję swoje zainteresowanie na MySQL i PHP.
Ponieważ na razie skupimy się na przetwarzaniu skanów spisów treści na postać plików TXT, chciałbym jeszcze zapytać o kilka rzeczy.
Załóżmy, że mam spis treści jednego numeru MT, zawierający w każdym wierszu 1 tytuł artykułu oraz numer strony (np. oddzielony od reszty separatorem typu średnik). Mam też stworzoną pustą bazę o określonych polach.

1. Jak ogólnie wygląda proces przesłania takiego pliku TXT do bazy? Czy trzeba to robić za pomocą specjalnego skryptu, czy np. jest jakieś oprogramowanie wspomagające ten proces? Np. na wzór Excela, do którego mogę zaimportować taki plik tekstowy, w wyniku czego tytuł zostanie umieszczony w pierwszej kolumnie a numer strony w drugiej. Kolejne wiersze pliku TXT zajmą kolejne wiersze arkusza kalkulacyjnego.

2. Załóżmy, że baza została wypełniona treścią. Jak wygląda potem sprawa jej edycji, nanoszenia poprawek, dopisywania czegoś w polach danego rekordu? Czy jest jakieś oprogramowanie, które ułatwia ten proces? Tu też odwołam się do Excela - czy można to robić w podobny sposób, "po ludzku" ;) czy tylko poprzez specjalne skrypty?

Awatar użytkownika
edwacc
Użytkownik
Posty: 163
Rejestracja: 14 paź 2008, 10:19
Lokalizacja: świętokrzyskie knieje

Post autor: edwacc » 16 wrz 2012, 10:20

1. Mając plik tekstowy z danymi umieszczonymi według jakiegoś porządku można utworzyć skrypt SQL zawierający operacje INSERT dla utworzonej bazy danych a dane zostaną wrzucone do tej bazy po jego uruchomieniu.
Aby utworzyć taki skrypt SQL trzeba napisać oczywiście inny skrypt, który wczyta dane z pliku .txt, utworzy dla każdego wiersza odpowiednią operację INSERT i zapisze do pliku wyjściowego .sql.
Skrypt produkcyjny można napisać w dowolnym języku, np. Perl, Bash, Python, moze to byc nawet C albo Java. Np. mamy wiersz w pliku tekstowym

Kod: Zaznacz cały

1985;06;Opis okladki;art1;str1;art2;str2;art3;str3
po konwersji bedzie to wygladalo np. tak:

Kod: Zaznacz cały

INSERT INTO mlody_technik (rok, mies, pk)
VALUES ("1985","czerwiec","Opis okladki","8506")

INSERT INTO mt_art(tytul, strona, fk, pk)
VALUES("art1","str1","8506","850601")

INSERT INTO mt_art(tytul, strona, fk, pk)
VALUES("art2","str2","8506","850602")

INSERT INTO mt_art(tytul, strona, fk, pk)
VALUES("art3","str3","8506","850603")
W bazie danych artykul wraz ze strona beda tworzyly oddzielny rekord powiazany z rekordem danego numeru. Do jednego numeru mozna bedzie wiec dodawac wiele artykulow.

2. Jeżeli dane będą w bazie danych to można oczywiście je edytować i usuwać za pomocą operacji SQL takich jak INSERT, UPDATE, DELETE.

Oczywiście wszystko można zapisać w excelu. Mając dane zapisane w jakimś porządku wystarczy napisać skrypt, który utworzy plik SQL wczytujący dane do bazy.

Awatar użytkownika
c4r0
Moderator
Posty: 2150
Rejestracja: 13 kwie 2004, 19:56
Lokalizacja: z lasu
Kontakt:

Post autor: c4r0 » 16 wrz 2012, 18:22

Skryptu nawet pisać nie trzeba, bo można na serwerze zainstalować PhpMyAdmin - to jest rozbudowany klient MySQL pracujący na poziomie PhP. Można za jego pomocą zaimportować plik CSV (czyli odpowiednio sformatowany plik tekstowy), przeglądać, edytować i tworzyć bazy. Zasadniczo baza komunikuje się za pomocą SQL więc na upartego można po prostu pisać z klawiatury komendy i w ten sposób bazę obsługiwać, bez żadnych skryptów (coś jak praca w DOS-ie).

Awatar użytkownika
Syzyf
-
Posty: 24
Rejestracja: 15 sty 2010, 10:54
Lokalizacja: Polska

Post autor: Syzyf » 20 wrz 2012, 10:30

Bardzo dziękuję za pomoc :grin: .
Dzięki Waszym wskazówkom mam ogólne pojęcie, jak się za to zabrać w razie potrzeby.

Awatar użytkownika
c4r0
Moderator
Posty: 2150
Rejestracja: 13 kwie 2004, 19:56
Lokalizacja: z lasu
Kontakt:

Post autor: c4r0 » 20 wrz 2012, 17:37

Powodzenia!

ODPOWIEDZ