cuốn sách gpt4 ai đã làm

c# - 如何按 X% 匹配 2 个字符串(即 >90% 匹配)

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-01 22:52:00 30 4
mua khóa gpt4 Nike

Ví dụ:

S1: "một số tên tệp chứa vài từ.txt"
S2: "Một số tên file chứa nhiều từ - Draft.txt"
S3: "Một số tên tệp chứa nhiều từ - một bản nháp.txt khác"
S4: "một số tên tệp không chứa vài từ.txt"

Điều quan trọng cần lưu ý là tôi có thể lấy S2 hoặc S3 cho chuỗi đầu tiên và khớp với các chuỗi khác.

Đã chỉnh sửa: Tôi có chuỗi "chính" và tôi cần tìm kết quả khớp.

Giả sử ở vòng đầu tiên, tôi mắc lỗi chính tả.

Bây giờ tôi chỉ cần nối toàn bộ từ.

Tôi muốn có thể xác định rằng 5 trên 7 từ khớp hoặc 7 trên 10 từ khớp. Con số chính xác của "X in Y" ít quan trọng hơn.

Điều quan trọng là làm thế nào để tìm ra sự khác biệt trong các từ X, bất kể vị trí của chúng trong câu.

Cảm ơn

câu trả lời hay nhất

Đây không phải là vấn đề về biểu thức chính quy.

Bạn không chỉ định ngôn ngữ, nhưng nếu bạn đang sử dụng java thì bạn có getLevenshteinKhoảng cách Các phương thức của StringUtils. Từ javadocs:

Tìm khoảng cách Levenshtein giữa hai chuỗi.

Đây là số lượng thay đổi cần thiết để thay đổi một Chuỗi thành một Chuỗi khác, trong đó mỗi thay đổi là một sửa đổi ký tự đơn (xóa, chèn hoặc thay thế).

cách sử dụng:

khoảng cách int = StringUtils.getLevenshteinDistance(
"một số tên tệp chứa vài từ.txt",
"một số tên tệp không chứa vài từ.txt"
);

Để khớp theo một tỷ lệ phần trăm nhất định, bạn phải quyết định chuỗi nào là "chính" vì chuỗi đầu vào có thể có độ dài khác nhau:khoảng cách Có thể tất cả đều bị xóa, vì vậy "con mèo""đục thủy tinh thể" Khoảng cách là 5. Cũng hơi khó để xác định thế nào là “khớp 90%” là gì. hãy nhìn vào của chúng tôi con mèo Ví dụ; 100% chuỗi "cat" được tìm thấy trong "cataract", nhưng chúng không giống nhau. Bạn phải quyết định các quy tắc này dựa trên trường hợp sử dụng của bạn.

gia hạn

Nếu "sự khác biệt" của bạn phải dựa trên từ, thì hãy chia chuỗi theo ranh giới từ và tạo một chuỗi từ các từ kết quả Map Việc đếm từng từ sẽ tương đối dễ dàng. So sánh bản đồ kết quả cho mỗi chuỗi sẽ cho bạn thước đo sơ bộ về "sự giống nhau". Ví dụ:

public HashMap countWords(String str) {
HashMap count = new HashMap();
for(Chuỗi s : str.split("\\s+")) {
if(!s.isEmpty()) {
if(counts.containsKey(s)) {
count.put(s, count.get(s) + 1);
} khác {
count.put(s, 1);
}
}
}
số lần trả lại;
}

// ...

String s1 = "một số tên file chứa vài từ.txt";
String s2 = "một số tên file không chứa vài từ.txt";
HashMap s1Counts = countWords(s1);
HashMap s2Counts = countWords(s2);
// giả sử s1 là chuỗi "master", đếm tổng số từ
int s1Total = 0, s2Total = 0;
for(Số nguyên i : s1Counts.values()) {
s1Total += i;
}
// lặp lại các từ trong s1, tìm số từ trùng khớp trong s2
for(Map.Entry mục nhập : s1Counts.entrySet()) {
if(s2Counts.containsKey(entry.getKey())) {
if(s2Counts.get(entry.getKey()) >= entry.getValue()) {
s2Total += entry.getValue();
} khác {
s2Total += s2Counts.get(entry.getKey());
}
}
}
// kết quả
System.out.println(s2Total + " out of " + s1Total + " các từ khớp.");

Về C# - Cách khớp 2 chuỗi theo X% (tức là khớp >90%), chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/11114651/

30 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress