大佬们我想实现用书号书名去匹配书号,但是目前匹配率太低l了,2000条才匹配700多条有大佬可以帮忙优化一下吗
[C#] 纯文本查看 复制代码 using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using MiniExcelLibs;
public class Program
{
// 存储处理结果的列表
public static List<myclass> ceshi = new List<myclass>();
// 程序的入口点
public static void Main()
{
// Excel 文件路径(需要替换为实际路径)
string filePath = "C:\\Users\\Administrator\\Desktop\\大书目.xlsx";
string myfilePath = "C:\\Users\\Administrator\\Desktop\\测试.xlsx";
// 搜索关键字和目标价格
string searchTerm = "中华国学经典必读书系:西游记"; // 替换为你的搜索关键字
double targetPrice = 35.00; // 目标价格
// 打印搜索关键字
Console.WriteLine(searchTerm);
try
{
// 从 Excel 文件中读取数据并转换为 IEnumerable<Books>
var rows = MiniExcel.Query<Books>(filePath)?.ToList();
var testrows = MiniExcel.Query<TestBooks>(myfilePath)?.ToList();
if (rows == null || testrows == null)
{
Console.WriteLine("无法读取数据,确保文件路径和格式正确。");
return;
}
// 存储结果的列表
var results = new ConcurrentBag<myclass>();
// 使用 Parallel.ForEach 进行多线程cha询
Parallel.ForEach(testrows, item =>
{
if (item.Title == null || item.Price == null)
{
Console.WriteLine("测试数据中发现无效项。");
return;
}
var book = rows
.Where(b => b.Title != null
&& b.Title.Contains(RemoveBrackets(item.Title))
&& b.Price.HasValue
&& b.Price == item.Price)
.FirstOrDefault();
Console.WriteLine($"改变前: {item.Title}“改变后”;{RemoveBrackets(item.Title)}");
if (book != null)
{
Console.WriteLine($"找到书籍: {book.Title}, 定价: {book.Price}. “书号”;{book.Barcode}");
results.Add(new myclass
{
oldTitle = item.Title,
oldPrice = item.Price,
newTitle = book.Title,
newPrice = book.Price,
Barcode = book.Barcode
});
}
else
{
Console.WriteLine("没有找到符合条件的书籍。");
results.Add(new myclass
{
oldTitle = item.Title,
oldPrice = item.Price,
newTitle = "0",
newPrice = 0.0,
Barcode = "0"
});
}
});
// 将结果保存到新的 Excel 文件中
MiniExcel.SaveAs("cesh241i.xlsx", results);
}
catch (Exception ex)
{
Console.WriteLine($"解析失败: {ex.Message}");
}
}
public static string RemoveBrackets(string input)
{
// 使用正则表达式去除括号及其内容
string resultsss = Regex.Replace(input, @"\(.*?\)", "");
return resultsss;
}
// 定义 Books 类,表示从 Excel 文件中读取的书籍数据
public class Books
{
public string? Barcode { get; set; } // 条码
public string? Title { get; set; } // 书名
public double? Price { get; set; } // 定价
public float? Discount { get; set; } // 折扣
public string? Stock { get; set; } // 库存
public string? Author { get; set; } // 作者
public string? Publisher { get; set; } // 出版社
public string? PublicationDate { get; set; } // 出版时间
public string? PrintingDate { get; set; } // 印刷时间
public string? Reader { get; set; } // 读者对象
public string? Classification { get; set; } // 中图分类
public string? Stamp { get; set; } // 印章
public string? Format { get; set; } // 开本
public string? Supplier { get; set; } // 供货商
}
// 定义 TestBooks 类,表示测试数据中的书籍数据
public class TestBooks
{
public string? Title { get; set; } // 书名
public double? Price { get; set; } // 定价
}
// 定义 myclass 类,表示最终处理结果的数据结构
public class myclass
{
public string? oldTitle { get; set; } // 旧书名
public double? oldPrice { get; set; } // 旧定价
public string? newTitle { get; set; } // 新书名
public double? newPrice { get; set; } // 新定价
public string? Barcode { get; set; } // 条码
}
}
|