Trình phân tích cú pháp bibtex trong python
Hiện tại, pybtex không có nhiều tài liệu. Nguồn tài liệu đầu tiên, ngoài mã nguồn, là trang chủ của pybtex và đặc biệt là The Friendly Manual of Pybtex Show Tôi không đủ giỏi về Python để trích xuất từ mã nguồn của pybtex tất cả kiến thức cần thiết để viết các tập lệnh dựa trên pybtex. Nhưng tôi đã xem mã nguồn, tôi đã thực hiện một số thử nghiệm và trang này là bản tóm tắt những gì tôi hiểu về cách sử dụng pybtex. Tất nhiên, phần lớn trang này đến từ sự phỏng đoán, vì vậy tôi có thể hoàn toàn sai về một số điều Để nhận xét hoặc chỉnh sửa, hãy xem danh bạ của tôi trên trang chủ của tôiKiểu dữ liệu mục nhập thư mụcĐây là kiểu dữ liệu mục nhập thư mục pybtex trông như thế nào (phần thụt lề là của tôi) BibliographyData (entries=OrderedCaseInsensitiveDict ({ 'adams93': Entry ( 'article', fields={ 'volume': '4', 'title': 'The title of the work', 'journal': 'The name of the journal', 'number': '2', 'month': '7', 'note': 'An optional note', 'year': '1993', 'pages': '201-213'}, persons={ 'author': [Person(u'Adams, Peter')]} ) }), preamble=[] ) phân tích tệpĐây là cách bạn khởi tạo trình phân tích cú pháp from pybtex.database.input import bibtex parser = bibtex.Parser() bib_data = parser.parse_file('myfile.bibtex') Tại thời điểm này, from pybtex.database.input import bibtex parser = bibtex.Parser() bib_data = parser.parse_file('myfile.bibtex')9 là một đối tượng bao gồm toàn bộ thư mục bib_data. mụcTôi tin rằng for e in bib_data.entries: print(bib_data.entries[e])0 là một tuple có thể lặp lại (nhưng tôi không chắc lắm). Điều tôi chắc chắn là nó có thể lặp lại Đoạn mã sau for e in bib_data.entries: print(bib_data.entries[e]) in từng mục (không được định dạng) bib_data. mục [e]Đến lượt mình, mỗi phần tử của vòng lặp for e in bib_data.entries: print(bib_data.entries[e])1 trước đó là một từ điển bib_data.entries[e] ở đâu for e in bib_data.entries: print(bib_data.entries[e])2là khóa bibtex (e. g. for e in bib_data.entries: print(bib_data.entries[e])3), trong khi for e in bib_data.entries: print(bib_data.entries[e])4 là một đối tượng 'mục nhập', thì đó có thể là một bộ (xét theo dấu ngoặc tròn trong phần tử 'Mục nhập' ở trên) Nhưng thành thật mà nói, tôi không hiểu bộ dữ liệu for e in bib_data.entries: print(bib_data.entries[e])4 này hoạt động như thế nào. Trên thực tế, mã for e in bib_data.entries: print(bib_data.entries[e])6 không hoạt động. Nó làm tăng lỗi for e in bib_data.entries: print(bib_data.entries[e])7. Tuy nhiên, đối tượng 'Entry' này có một số thuộc tính, được mô tả bên dưới Một số thuộc tính của đối tượng 'Entry'bib_data. mục [e]. loạiĐó là loại mục nhập (điện tử, sách, bài báo, bộ sưu tập) bib_data. mục [e]. lĩnh vựcĐó là một từ điển bao gồm tất cả các lĩnh vực ngoại trừ 'tác giả' hoặc 'biên tập viên'. Pybtex quản lý nội dung của trường 'tác giả' hoặc 'biên tập viên' không phải dưới dạng chuỗi, mà dưới dạng danh sách các đối tượng 'Người' Ngoài ra, loại mục nhập (sách, bài báo, v.v. ) không có trong từ điển for e in bib_data.entries: print(bib_data.entries[e])8 Các khóa của từ điển for e in bib_data.entries: print(bib_data.entries[e])8 là bib_data.entries[e]0, bib_data.entries[e]1 (không phân biệt chữ hoa chữ thường), v.v. Mã bib_data.entries[e]2 mang lại kết quả giống như '1993' (một chuỗi) bib_data. mục [e]. ngườiĐó là một đối tượng thuộc loại bib_data.entries[e]3, tôi. e. một loại từ điển cụ thể
Về cơ bản, bib_data.entries[e]6 là một từ điển, vì vậy print(bib_data.entries[e].persons[u'Editor']) mang lại một cái gì đó như [Person(u'Trevisan, M.'), Person(u'Gigliozzi, G.')] Tuy nhiên, nó tạo ra một bib_data.entries[e]7 nếu mục nhập thư mục không bao gồm một trường bib_data.entries[e]4 nhưng, ví dụ, một trường bib_data.entries[e]5 (hoặc không phải là bib_data.entries[e]4 hoặc print(bib_data.entries[e].persons[u'Editor'])1') bib_data. mục [e]. người['editor']. đầu tiên()Đó là một danh sách với một phần tử cho mỗi tên của tác giả/biên tập viên. Nếu chỉ có một tác giả/biên tập viên, nó vẫn là một danh sách, chỉ bao gồm một yếu tố Tôi không chắc pybtex làm gì khi có nhiều tên (e. g. George Walker Bush) hoặc nhiều họ. Tôi biết chắc chắn pybtex xem xét các trường hợp như "C. M. " (không có khoảng cách ở giữa) hoặc "Jean-Daniel" (dấu gạch ngang ở giữa, không có khoảng trắng ở giữa) một chuỗi Unicode ("Jean-Daniel" không được chia thành "Jean" và "Daniel) Đoạn mã sau mang lại danh sách với các phần khác của tên bib_data.entries[e].persons['editor'].middle() bib_data.entries[e].persons['editor'].last() bib_data.entries[e].persons['editor'].von() bib_data.entries[e].persons['editor'].junior() Vì các đoạn mã đã nói ở trên trả về danh sách (không phải chuỗi), nếu bạn muốn in tên, bạn cần sử dụng print(bib_data.entries[e].persons[u'Editor'])2, như thế này from pybtex.database.input import bibtex parser = bibtex.Parser() bib_data = parser.parse_file('myfile.bibtex')0 Nếu bạn muốn tìm kiếm giữa các tên thì sao? from pybtex.database.input import bibtex parser = bibtex.Parser() bib_data = parser.parse_file('myfile.bibtex')1 khớp với 'Monella' nếu 'Monella' là cả họ, nhưng from pybtex.database.input import bibtex parser = bibtex.Parser() bib_data = parser.parse_file('myfile.bibtex')2 không khớp với 'Monella'. Trong trường hợp này, bạn phải sử dụng from pybtex.database.input import bibtex parser = bibtex.Parser() bib_data = parser.parse_file('myfile.bibtex')3 phù hợp với cả 'Monella' và 'Stella' bib_data. mục [e]. mặt hàngTôi tin (mặc dù tôi không chắc lắm) rằng đó là một bộ, trong đó print(bib_data.entries[e].persons[u'Editor'])3là khóa bibtex (e. g. for e in bib_data.entries: print(bib_data.entries[e])3. Như chúng ta đã thấy ở trên, bạn cũng có thể lấy khóa đó bằng. from pybtex.database.input import bibtex parser = bibtex.Parser() bib_data = parser.parse_file('myfile.bibtex')4Vòng lặp 'for' này sẽ in danh sách tất cả các khóa bibtex trong thư mục. print(bib_data.entries[e].persons[u'Editor'])5là toàn bộ đối tượng 'Mục nhập' (xem ở trên), đến lượt nó bao gồm ba đối tượng
Từ các thí nghiệm của tôi, có vẻ như không có print(bib_data.entries[e].persons[u'Editor'])6 Hai đoạn mã sau trả về chính xác cùng một đầu ra (đó là danh sách các mục được phân tách bằng các dòng trống và các dòng có '---') |