|
1 | | -use csv::ReaderBuilder; |
2 | 1 | use discorec::{Dataset, RecommenderBuilder}; |
3 | 2 | use pgvector::Vector; |
4 | 3 | use postgres::{Client, NoTls}; |
5 | 4 | use std::collections::HashMap; |
6 | 5 | use std::error::Error; |
7 | 6 | use std::fs::File; |
8 | | -use std::io::Read; |
| 7 | +use std::io::{BufRead, BufReader, Read}; |
9 | 8 | use std::path::Path; |
10 | 9 |
|
11 | 10 | fn main() -> Result<(), Box<dyn Error>> { |
@@ -73,27 +72,23 @@ fn load_movielens(path: &Path) -> Result<Dataset<i32, String>, Box<dyn Error>> { |
73 | 72 | let mut buf = Vec::new(); |
74 | 73 | movies_file.read_to_end(&mut buf)?; |
75 | 74 | let movies_data = String::from_utf8_lossy(&buf); |
76 | | - let mut rdr = ReaderBuilder::new() |
77 | | - .has_headers(false) |
78 | | - .delimiter(b'|') |
79 | | - .from_reader(movies_data.as_bytes()); |
80 | | - for record in rdr.records() { |
81 | | - let row = record?; |
| 75 | + let rdr = BufReader::new(movies_data.as_bytes()); |
| 76 | + for line in rdr.lines() { |
| 77 | + let line = line?; |
| 78 | + let row: Vec<_> = line.split('|').collect(); |
82 | 79 | movies.insert(row[0].to_string(), row[1].to_string()); |
83 | 80 | } |
84 | 81 |
|
85 | 82 | // read ratings and create dataset |
86 | 83 | let mut data = Dataset::new(); |
87 | 84 | let ratings_file = File::open(path.join("u.data"))?; |
88 | | - let mut rdr = ReaderBuilder::new() |
89 | | - .has_headers(false) |
90 | | - .delimiter(b'\t') |
91 | | - .from_reader(ratings_file); |
92 | | - for record in rdr.records() { |
93 | | - let row = record?; |
| 85 | + let rdr = BufReader::new(ratings_file); |
| 86 | + for line in rdr.lines() { |
| 87 | + let line = line?; |
| 88 | + let row: Vec<_> = line.split('\t').collect(); |
94 | 89 | data.push( |
95 | 90 | row[0].parse::<i32>()?, |
96 | | - movies.get(&row[1]).unwrap().to_string(), |
| 91 | + movies.get(row[1]).unwrap().to_string(), |
97 | 92 | row[2].parse()?, |
98 | 93 | ); |
99 | 94 | } |
|
0 commit comments