ไลบรารี C ที่ทะเยอทะยานชื่อ libpostal ซึ่งออกแบบมาเพื่อแยกวิเคราะห์และทำให้ที่อยู่ทั่วโลกเป็นมาตรฐาน ได้จุดประกายการถกเถียงในหมู่นักพัฒนาเกี่ยวกับความท้าทายพื้นฐานของการประมวลผลที่อยู่แบบอัตโนมัติอีกครั้ง แม้ว่าไลบรารีนี้จะมีเป้าหมายจัดการกับทุกที่อยู่บนโลก แต่ข้อเสนอแนะจากชุมชนเผยให้เห็นช่องว่างที่สำคัญระหว่างความสามารถในการแยกวิเคราะห์ในทางทฤษฎีกับความซับซ้อนของที่อยู่ในโลกแห่งความเป็นจริง
ความต้องการหน่วยความจำสร้างความท้าทายในการติดตั้งใช้งาน
หนึ่งในข้อกังวลเชิงปฏิบัติที่สำคัญที่สุดที่ผู้ใช้ยกขึ้นมาคือความต้องการทรัพยากรที่มากของ libpostal ไลบรารีนี้ต้องการ RAM ประมาณ 2GB เมื่อโหลดเต็มที่เนื่องจากโมเดลข้อมูลที่ครอบคลุม สิ่งนี้สร้างความท้าทายในการติดตั้งใช้งานสำหรับแอปพลิเคชันแบบ containerized และระบบขนาดเล็ก อย่างไรก็ตาม นักพัฒนาได้พบวิธีแก้ไขโดยการคอมไพล์ไลบรารีด้วยเฉพาะโมเดลประเทศที่จำเป็นสำหรับกรณีการใช้งานของพวกเขา ซึ่งสามารถลดหน่วยความจำได้ถึง 70%
ความต้องการของระบบ:
- หน่วยความจำ: ประมาณ 2GB RAM เมื่อโหลดข้อมูลครบถ้วน
- การปรับปรุงหน่วยความจำ: สามารถลดลงได้สูงสุด 70% โดยการคอมไพล์เฉพาะโมเดลประเทศที่ต้องการเท่านั้น
- แพลตฟอร์มที่รองรับ: Linux/Debian, Windows (MSVC/CMake)
- Dependencies ที่จำเป็น: cmake, g++, ICU locale data, libcurl4-openssl-dev
กรณีขอบเขตเผยให้เห็นข้อจำกัดพื้นฐานของการแยกวิเคราะห์
ชุมชนได้เน้นย้ำสถานการณ์มากมายที่การแยกวิเคราะห์ที่อยู่แบบดั้งเดิมล้มเหลวโดยสิ้นเชิง ที่อยู่ในชนบทและที่อยู่ไม่เป็นทางการนำเสนอความท้าทายเฉพาะ เช่น คำแนะนำทิศทางอย่าง Third on right of main หรือ third house down from the barn - ที่อยู่ที่บริการไปรษณีย์สามารถส่งได้สำเร็จ แต่ระบบอัตโนมัติมีปัญหาในการประมวลผล ตัวอย่างเหล่านี้เน้นย้ำถึงปัญหาที่กว้างขึ้น: ที่อยู่ที่ยากที่สุดในการแยกวิเคราะห์มักจะเป็นที่อยู่เดียวกันที่ยากที่สุดในการจับคู่และตรวจสอบ
ป้ายกำกับของตัวแยกวิเคราะห์ที่อยู่:
- องค์ประกอบพื้นฐาน: house_number, road, city, state, country, postcode
- รายละเอียดอาคار: entrance, level, unit, house (ชื่ออาคาร)
- ภูมิศาสตร์: island, suburb, state_district, world_region
- กรณีพิเศษ: po_box, crossing (สี่แยกถนน), near (บริเวณใกล้เคียง), category (เฉพาะ Netherlands )
- ทางเลือกสำรอง: address (องค์ประกอบที่ยังไม่ได้แก้ไข), no_number (ที่อยู่ที่ถูกต้องแต่ไม่มีเลขที่)
การถกเถียงเรื่องการตรวจสอบเทียบกับการมีอยู่จริง
การถกเถียงที่ร้อนแรงได้เกิดขึ้นเกี่ยวกับจุดประสงค์ของการตรวจสอบที่อยู่เอง นักวิจารณ์โต้แย้งว่าธุรกิจไม่สามารถตรวจสอบได้อย่างแท้จริงว่าที่อยู่มีอยู่หรือไม่ สามารถตรวจสอบได้เพียงว่าปรากฏในฐานข้อมูลที่อาจล้าสมัยหรือไม่ สิ่งนี้สร้างสถานการณ์ที่น่าหงุดหงิดที่ผู้อยู่อาศัยในอาคารใหม่พบว่าที่อยู่ที่ถูกต้องของพวกเขาถูกปฏิเสธโดยระบบที่อ้างว่าไม่มีอยู่จริง การถกเถียงมุ่งเน้นไปที่ว่าเป้าหมายควรเป็นการตรวจสอบโครงสร้างหรือเพียงแค่ให้แน่ใจว่าบริการส่งจดหมายสามารถประมวลผลที่อยู่ได้
เว็บฟอร์มควรเสนอช่องป้อนข้อมูลหลายบรรทัดที่มีป้ายกำกับว่า 'สิ่งนี้จะไปตรงบนป้ายที่อยู่ เขียนอะไรก็ได้ที่คุณต้องการ แต่เป็นปัญหาของคุณถ้ามันไม่มาถึง'
แนวทางทางเลือกได้รับความนิยม
นักพัฒนาบางคนสนับสนุนการละทิ้งแนวทางที่ใช้การแยกวิเคราะห์โดยสิ้นเชิงเพื่อสนับสนุนระบบที่ใช้การค้นหาที่เปรียบเทียบที่อยู่กับชุดข้อมูลโลกแห่งความเป็นจริงที่ครอบคลุม ปรัชญานี้ถือว่าที่อยู่เป็นข้อมูลที่ไม่มีโครงสร้างโดยพื้นฐานที่ไม่สามารถตรวจสอบได้อย่างน่าเชื่อถือผ่านการวิเคราะห์โครงสร้างเพียงอย่างเดียว ข้อโต้แย้งแสดงให้เห็นว่าเนื่องจากตัวแยกวิเคราะห์ใดๆ ที่ยอมรับได้เพียงพอที่จะจัดการกับความหลากหลายของที่อยู่ในโลกแห่งความเป็นจริงจะยอมรับเกือบทุกอย่าง แนวทางการแยกวิเคราะห์จึงกลายเป็นสิ่งที่ขัดผลประโยชน์
คำสั่งการติดตั้ง (Linux):
ข้อกำหนดเบื้องต้น
aptitude install cmake g++ libcurl4-openssl-dev
สร้าง libpostal
git clone https://github.com/openvenues/libpostal
cd libpostal
mkdir -p build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -DPOSTAL_DATA_DIR=/usr/local/share/libpostal
make -j4
sudo make install
sudo ldconfig
เรื่องราวความสำเร็จในทางปฏิบัติแม้จะมีข้อจำกัด
แม้จะมีข้อกังวลในทางทฤษฎี แต่นักพัฒนาหลายคนรายงานความสำเร็จในทางปฏิบัติกับ libpostal ในสภาพแวดล้อมการผลิต ผู้ใช้ชื่นชมความสามารถในการจัดการกับกรณีขอบเขตที่แปลกประหลาดในข้อมูลของพวกเขา อธิบายว่าเป็นการสร้างการใช้งานที่ยอดเยี่ยมของโมเดลที่เล็กมากๆ ของชุดย่อยที่เฉพาะเจาะจงมากของภาษา ไลบรารีทำงานได้ดีกว่าทางเลือกที่ใช้ regex อย่างมีนัยสำคัญและให้ผลลัพธ์ที่มีโครงสร้างที่มีประโยชน์สำหรับรูปแบบที่อยู่ทั่วไปหลายรูปแบบ
การถกเถียงที่กำลังดำเนินอยู่สะท้อนถึงความท้าทายที่กว้างขึ้นในการพัฒนาซอฟต์แวร์: การสร้างสมดุลระหว่างความสมบูรณ์ในทางทฤษฎีกับประโยชน์ใช้สอยในทางปฏิบัติ แม้ว่า libpostal อาจไม่ได้แก้ปัญหาการแยกวิเคราะห์ที่อยู่ทุกปัญหา แต่มันแสดงถึงการปรับปรุงที่สำคัญเหนือทางเลือกที่ง่ายกว่าสำหรับแอปพลิเคชันในโลกแห่งความเป็นจริงหลายแอปพลิเคชัน