pub mod arman;
pub mod bijankhan;
pub mod dadegan;
pub mod degarbayan;
pub mod faspell;
pub mod hamshahri;
pub mod mirastext;
pub mod mizan;
pub mod naab;
pub mod ner;
pub mod persian_plain_text;
pub mod persica;
pub mod peykare;
pub mod pn_summary;
pub mod quran;
pub mod sentipers;
pub mod tnews;
pub mod treebank;
pub mod universal_dadegan;
pub mod verbvalency;
pub mod wikipedia;
pub use arman::ArmanReader;
pub use bijankhan::BijankhanReader;
pub use dadegan::{DadeganMode, DadeganReader};
pub use degarbayan::{DegarbayanReader, ParaphrasePair};
pub use faspell::{FaSpellReader, SpellEntry};
pub use hamshahri::{HamshahriDoc, HamshahriReader};
pub use mirastext::{MirasDoc, MirasTextReader};
pub use mizan::MizanReader;
pub use naab::NaabReader;
pub use ner::NerReader;
pub use persian_plain_text::PersianPlainTextReader;
pub use persica::{PersicaDoc, PersicaReader};
pub use peykare::PeykareReader;
pub use pn_summary::{PnSummaryDoc, PnSummaryReader};
pub use quran::{QuranPart, QuranReader};
pub use sentipers::{SentiComment, SentiDoc, SentiPersReader, SentiSentence};
pub use tnews::{TNewsDoc, TNewsReader};
pub use treebank::TreebankReader;
pub use universal_dadegan::{UniversalDadeganMode, UniversalDadeganReader};
pub use verbvalency::{Verb, VerbValencyReader};
pub use wikipedia::{WikiDoc, WikipediaReader};
use crate::types::TaggedSentence;
pub trait CorpusReader {
fn sents(&self) -> Box<dyn Iterator<Item = TaggedSentence> + '_>;
fn words(&self) -> Box<dyn Iterator<Item = String> + '_> {
Box::new(self.sents().flat_map(|s| s.into_iter().map(|(w, _)| w)))
}
fn tagged_words(&self) -> Box<dyn Iterator<Item = (String, String)> + '_> {
Box::new(self.sents().flat_map(|s| s.into_iter()))
}
}