Parse BibTeX format content
(self, bibtex_content: str)
| 41 | raise ParseError(f"Unsupported input type: {input_type}") |
| 42 | |
| 43 | def _parse_bibtex(self, bibtex_content: str) -> List[RawEntry]: |
| 44 | """Parse BibTeX format content""" |
| 45 | entries = [] |
| 46 | try: |
| 47 | bib_database = bibtexparser.loads(bibtex_content) |
| 48 | for i, entry in enumerate(bib_database.entries): |
| 49 | original_entry = dict(entry) |
| 50 | |
| 51 | self.logger.debug(f"Entry {i}: original fields: {list(original_entry.keys())}") |
| 52 | |
| 53 | raw_entry: RawEntry = { |
| 54 | 'id': i, |
| 55 | 'raw_text': str(entry), |
| 56 | 'doi': entry.get('doi'), |
| 57 | 'url': entry.get('url'), |
| 58 | 'query_string': None, |
| 59 | 'original_entry': original_entry |
| 60 | } |
| 61 | |
| 62 | # If no DOI is available, generate query string |
| 63 | if not raw_entry['doi']: |
| 64 | query_parts = [] |
| 65 | if 'title' in entry: |
| 66 | query_parts.append(entry['title']) |
| 67 | if 'author' in entry: |
| 68 | query_parts.append(entry['author']) |
| 69 | if 'year' in entry: |
| 70 | query_parts.append(entry['year']) |
| 71 | raw_entry['query_string'] = ' '.join(query_parts) |
| 72 | |
| 73 | entries.append(raw_entry) |
| 74 | |
| 75 | self.logger.info(f"Successfully parsed {len(entries)} BibTeX entries") |
| 76 | return entries |
| 77 | |
| 78 | except Exception as e: |
| 79 | self.logger.error(f"BibTeX parsing failed: {str(e)}") |
| 80 | raise ParseError(f"BibTeX parsing failed: {str(e)}") |
| 81 | |
| 82 | def _parse_text(self, text_content: str) -> List[RawEntry]: |
| 83 | """Parse plain text format content""" |