के साथ एन-ग्राम मॉडलिंग मुझे एन-ग्राम्स (एन शब्दों के अनुक्रम) और उनके संदर्भों (जो शब्द एन-ग्राम के पास उनके आवृत्ति के साथ दिखाई देते हैं) के संग्रह को मॉडल करने की आवश्यकता है। का मेरा विचार यह था:जावा हैशप
public class Ngram {
private String[] words;
private HashMap<String, Integer> contextCount = new HashMap<String, Integer>();
}
फिर, सभी विभिन्न एन-ग्राम की गिनती के लिए, मैं एक HashMap का उपयोग करें,
HashMap<String, Ngram> ngrams = new HashMap<String, Ngram>();
की तरह और जब पाठ प्राप्त मैं इसे करने के लिए जोड़ सकते हैं। समस्या यह है कि, जब एन-ग्राम की संख्या 10,000 या उससे अधिक हो जाती है, तो जेवीएम हीप भर जाता है (यह अधिकतम 1.5 जीबी तक सेट होता है), और सब कुछ वास्तव में बुरी तरह धीमा हो जाता है।
क्या ऐसा करने का कोई बेहतर तरीका है, इसलिए ऐसी स्मृति खपत से बचने के लिए? इसके अलावा, संदर्भ एन-ग्राम के बीच आसानी से तुलनीय होना चाहिए, जो मुझे यकीन नहीं है कि मेरे समाधान के साथ संभव है।
हम इनके लिए किस आकार को देख रहे हैं? प्रति एन-ग्राम के कितने शब्द के बारे में? साथ ही, क्या आपके पास सहायक अस्थायी स्मृति की तरह सहायक सहायक स्मृति है? यह न भूलें कि एक हैशप एक स्मृति गहन संरचना हो सकता है जबकि यह आकार बदलता है! – corsiKa
आप उन एन-ग्राम्स के साथ क्या करना चाहते हैं? क्या आपने एन-ग्राम-टोकनफिल्टर का उपयोग करके ल्यूसीन पर एक नज़र डाली है? हो सकता है कि आप कार्य करने के लिए आवश्यक कार्यों को करने के लिए एक ल्यूसीन इंडेक्स का उपयोग कर सकें। फिर आप इसे अपनी मेमोरी में रख सकते हैं या इसे फाइल सिस्टम में स्टोर कर सकते हैं। – csupnig
मेरे पास लगभग 50,000 समाचार लेख हैं जो मैं ngrams एकत्र कर रहा हूं। 6000 लेखों को संसाधित करने के बाद, संदर्भ के औसत आकार Ngram में हैशमैप 13 के आसपास है। मेरे पास कोई सहायक स्मृति नहीं है, कम से कम मुझे ऐसा नहीं लगता :) – Nikola