Làm thế nào để tìm khó viết sai chính tả?


16

Đây là một câu hỏi mà tôi tin rằng có thể được giải quyết bằng một số khai thác dữ liệu và thuật toán tinh vi, nhưng tôi không biết làm thế nào. Bất kỳ con trỏ nào về việc sử dụng nguồn dữ liệu nào và áp dụng thuật toán nào đều được hoan nghênh.

Bối cảnh: Tôi là một người Hungary gốc Hungary, người đang mong đợi một em bé với một người Ba Lan-Ucraina và chưa hoàn toàn thiết lập tâm trí của chúng tôi ở đất nước nào chúng tôi muốn định cư. Như bạn có thể mong đợi, việc chọn một tên cụ thể là vô cùng quan trọng và là một cuộc tranh luận sôi nổi. Về phía tôi, tôi vẫn bị tổn thương bởi tất cả những rắc rối tôi phải trải qua khi ai đó sẽ viết sai tên của tôi khi tôi chuyển từ nước này sang nước khác. Ví dụ, nếu bạn được gọi là "Adrian", bạn sẽ được ban phước ở Romania, chỉ để thấy rằng cuối cùng bạn trở thành "Adri e n" là một tài liệu chính thức của Pháp. Vì vậy, yêu cầu duy nhất của tôi là làm cho tên của em bé không được viết sai chính tả ở một số nước châu Âu.

Báo cáo sự cố: Đưa ra một tập hợp các quốc gia, ví dụ: Pháp, Đức, Thụy Điển, Ba Lan và Rumani, tìm danh sách các tên đã cho, khi phát âm đúng, không có khả năng bị người địa phương viết sai chính tả.

Chính thức hơn: Đặt p (c, n) là hàm trả về xác suất tên n bị sai chính tả ở quốc gia c . Với C một tập hợp các quốc gia và p₀ một xác suất, tìm N một tập hợp các tên nhất định, như vậy

với mọi nNcC , p (c, n) <p₀

Suy nghĩ ban đầu : Vấn đề cốt lõi là làm thế nào để thực hiện p (c, n) . Người ta có thể cố gắng ước chừng nó với một heuristic. Rõ ràng một cái tên có khả năng bị sai chính tả trong hai trường hợp:

  1. Nó ít được sử dụng ở nước đó.
  2. Nó tương tự như một cái tên khác, không được sử dụng nhiều ở quốc gia đó.

Tôi không chắc làm thế nào tôi có thể sử dụng Internet, ví dụ Wikipedia, để trả lời hiệu quả hai câu hỏi này. Làm thế nào một danh sách chỉ những tên được sử dụng khá thường xuyên trong một quốc gia? Làm thế nào một người sẽ tìm kiếm những từ tương tự?


1
Tôi không chắc chắn sự phổ biến sẽ ảnh hưởng lớn đến xác suất sai chính tả, khi so sánh với khoảng cách chỉnh sửa thấp với các tên khác. Ví dụ: Hanna có âm thanh giống / giống với HannahAnna , và Lucas tương tự như LucaLukas . Khi bạn có thể nắm trong tay danh sách tên của từng quốc gia, bạn có thể bắt đầu bằng cách phân cụm theo khoảng cách chỉnh sửa thấp.
amon

Tôi nghĩ rằng nó cũng phải làm với sự nổi tiếng. Không ai đánh vần Anna bằng tiếng Rumani, vì double n chỉ là lạ trong ngôn ngữ đó. Tương tự như vậy, một người Pháp có thể sẽ viết Christian ngay cả khi bạn phát âm nó mà không có h . (Pun dự định .: D)
user1202136 8/12/2015

5
Cách tiếp cận thực dụng sẽ là sử dụng GUID.
toniedzwiedz

1
Tài liệu tham khảo XKCD tuyệt vời. Nhưng đừng quên các bảng Little Bobby ;-) xkcd.com/327
Mawg nói rằng phục hồi Monica

Tôi sẽ xem xét so sánh các nguyên âm trong các ngôn ngữ đó. Tiếng Đức của tôi trôi chảy, nhưng tôi vẫn tạo ra một mớ hỗn độn Ö
Mawg nói rằng hãy phục hồi lại

Câu trả lời:


15

Có một số cách tiếp cận sẽ hiệu quả hơn đối với một số ngôn ngữ so với các ngôn ngữ khác. Ví dụ, soundex (và một mô tả khác mà tôi thích ) được thiết kế cho cách phát âm tiếng Anh của tên. Với soundex, Michaeltrở thành M240. Điều này có một số bước:

  1. Chữ cái đầu tiên bị cô lập. ( Michael)
  2. Tất cả các nguyên âm được loại bỏ khỏi phần còn lại ( Mchl)
  3. Phụ âm được thay thế
    • c -> 2
    • l -> 4
  4. Số không pad bên trái.

Các nhóm của chuyển đổi phụ âm được dựa trên sự tương đồng ngữ âm của họ - B, F, PVtất cả các bản đồ để 1.

Và có những biến thể về điều này theo thời gian . Nó đặc biệt hữu ích trong phả hệ trong đó cách đánh vần tên có thể thay đổi theo thời gian, nhưng cách phát âm vẫn tương tự.


Ngoài ra còn có các cách tiếp cận như xếp hạng trận đấu được các hãng hàng không phát triển cho các tên (chứ không phải là phả hệ của Mỹ).

Mã hóa của phương pháp xếp hạng đối sánh (MRA) là:

  1. Xóa tất cả các nguyên âm không dẫn đầu ( Michaeltrở thành MchlAnthonytrở thành Anthny)
  2. Xóa hằng số thứ hai của bất kỳ nhân đôi nào
  3. Nếu chuỗi dài hơn 6 ký tự, hãy giảm chuỗi còn lại xuống còn 6 ký tự bằng cách lấy ba ký tự đầu tiên và ba ký tự cuối cùng.

Thông số kỹ thuật đầy đủ cho điều này có thể được tìm thấy trên archive.org - lưu ý rằng nó "không nhỏ" (mẫu in là 214 trang).

Các so sánh có ngưỡng phù hợp dựa trên thời gian văn bản dài.

các thuật toán ngữ âm khác nữa .


Vì vậy, những gì tôi muốn khuyến khích bạn làm là sử dụng soundex, sử dụng cách tiếp cận xếp hạng phù hợp hoặc sửa đổi soundex dựa trên phụ âm Rumaniphụ âm Ba Lan .

Hãy nhớ rằng với Soundex, các phụ âm được nhóm lại (Trong tiếng Ba Lan, m, n, ɲtất cả đều phụ âm mũi được nhóm, và bạn sẽ có khả năng nhóm plosives môi, răng, và phế nang - có thể họ không có tiếng nói hoặc bày tỏ với nhau - cấp, tôi không biết tiếng Ba Lan vì vậy đừng biết nếu tôi chỉ nói những điều không đúng ở đó).

Sau đó, chỉ cần chuyển đổi tất cả các tên trong cơ sở dữ liệu sang hai hệ thống soundex khác nhau và tìm ra tên nào có tập hợp va chạm thấp nhất trong các ngôn ngữ khác nhau. Điều này cung cấp cho bạn tên riêng biệt. Vì vậy, Smithnó không hiển thị như Smyth.


Tuy nhiên, điều này chỉ giải quyết được "tên có khả năng va chạm với các tên khác và bị nghe nhầm". Nó không giải quyết theo cách khác của "tên được nghe chính xác, viết sai" và vì thế, người ta nên tập trung sự chú ý của họ vào các tên phổ biến.

Ví dụ, Michaellà một cái tên rất phổ biến ở Mỹ từ đầu năm 1950 đến cuối năm 1970. Nó thực sự phổ biến . Tuy nhiên, vì một số lý do, cái tên Michealnày khá phổ biến vào những năm 1950 (đã đạt đến cái tên phổ biến thứ 83 ở thời kỳ đỉnh cao). Và tôi chắc chắn rằng những người có tên Michealliên tục bị sai tên.

Vì vậy, bạn nên tập trung vào những cái tên có một tên chi phối sự phổ biến của tên cho một cách phát âm nhất định. Liếc nhìn một người tiêu dùng dữ liệu cho tên theo năm, bạn có thể thấy rằng tên bắt đầu bằng Jam ... cho một cậu bé là một mớ hỗn độn với Jamaal, Jamal, Jamarvà những người khác. Ngẫu nhiên, những cái tên này có soundexes hơi khác nhau cho Mỹ ( J540, J540J560- các lrcác nhóm khác nhau mặc dù họ có liên quan chặt chẽ trong ngữ âm). Tuy nhiên, đối với một người từ Nhật Bản, chỉ có một âm thanh trong khu vực ngữ âm lrđược phát âm bằng tiếng Anh Mỹ. Điều này cũng có thể đặt ra một thách thức với các phụ âm hàng đầu sử dụng soundex mà người ta nên biết (tôi đã từng làm việc với một phụ nữ Nhật Bản tự gọi mình là Risa (với 'R') thay vì Lisa là La Mã hóa tên tiếng Nhật của cô ấy).

Bạn sẽ lưu ý rằng các ví dụ của tôi là dành cho Hoa Kỳ. Dữ liệu đó có thể dễ dàng truy cập. Rõ ràng có một số điều cho Ba LanHungary , và chỉ gợi ý về tính phổ biến của tên Hungary ... Tôi nghi ngờ rằng việc tìm kiếm bằng một ngôn ngữ khác tiếng Anh có thể hữu ích ở đó.

Vì vậy, được đặt cho soundex cho một tên, một vài va chạm và chính tả thực sự nằm trong tập hợp các va chạm. Tốt hơn là, đây là một tên phổ biến. Nhìn vào danh sách này, đi cùng Krisztiáncó thể sẽ bị lỗi chính tả trong khi, Zoltánít có khả năng như vậy (# 22 tên em bé phổ biến nhất trong năm 2011 ở Hungary!). Điều đó nói rằng, bạn không thể đi sai với Michael.


2
Câu trả lời tuyệt vời! Tôi sẽ cố gắng thực hiện nó và sau khi hoàn thành, tôi chia sẻ mã và chấp nhận câu trả lời của bạn.
dùng1202136

2
Một nỗ lực để thực hiện ý tưởng này. Không hoàn toàn vượt qua "thử nghiệm người dùng". :) github.com/cristiklein/idemscriptent-given-names
user1202136

Michael trả lời tuyệt vời! @ user1202136 công việc tuyệt vời trên kịch bản! Tôi quan tâm để xem kết quả :)
Chris Cirefice

1
@ChrisCirefice: Mặc dù câu trả lời của Michael chỉ đơn giản là tuyệt vời, tôi thấy nó không tạo ra những cái tên vượt qua "bài kiểm tra người dùng". Tôi đã tìm kiếm một thuật toán đơn giản hơn nhiều, đó là cố gắng tìm các tên được đánh vần giống hệt nhau trong danh sách 100 tên hàng đầu. Vui lòng tìm kết quả tại đây: github.com/cristiklein/idemscriptent-given-names
user1202136

1

Bạn có thể muốn xem xét thuật toán ngữ âm Double Metaphone, được thiết kế để xử lý cách các từ được phát âm trong các ngôn ngữ khác nhau. Ngoài ra còn có Metaphone 3, nhưng chi phí để sử dụng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.