दिलचस्प पोस्ट
एक्स-मैक्रोज का असली दुनिया का उपयोग जावा, समान पंक्ति में किसी अन्य कक्ष के फ़ंक्शन के रूप में एक सेल सामग्री परिवर्तित करें ऑब्जेक्ट मेमोरी एड्रेस एक्सेस करना एंड्रॉइड छविदृश्य: सेटिंग खींचें और ज़ूम पैरामीटर चुटकी जीआईटी की शाखाओं में गिट टैग कैसे अलग हैं? Android में पाठ के लिए छाया प्रभाव? एकल एक्शन क्लास में एकाधिक सबमिट बटन परिदृश्य में क्लिक सबमिट बटन का पता कैसे लगाया जाता है? जावास्क्रिप्ट: सर्वश्रेष्ठ सिंगलटन पैटर्न एएसपी.नेट 4.5 वेब सर्वर पर पंजीकृत नहीं है HTML5 और जावास्क्रिप्ट में स्थानीय स्टोरेज के माध्यम से लूपिंग जावा स्विंग वर्कस्पेस / सेटिंग्स को सहेजें और लोड करें पायथन डीबगर के साथ आरंभ करना, पीडीबी रेल 3 पर रूबी: क्लाइंट के लिए रेल के माध्यम से डेटा स्ट्रीमिंग जावा क्लास बाहरी कक्षा निजी सदस्यों का उपयोग क्यों कर सकता है? matplotlib लीजेंड मार्करों केवल एक बार

एक वाक्य से एन-ग्राम पीढ़ी

जैसे स्ट्रिंग की एन-ग्राम कैसे उत्पन्न करें:

String Input="This is my car." 

मैं इस इनपुट के साथ एन-ग्राम उत्पन्न करना चाहता हूं:

 Input Ngram size = 3 

उत्पादन होना चाहिए:

 This is my car This is is my my car This is my is my car 

जावा में कुछ विचार दें, इसे कैसे कार्यान्वित करें या यदि इसके लिए कोई लाइब्रेरी उपलब्ध है।

मैं इस एनजीआरएमटीओनिज़र का उपयोग करने की कोशिश कर रहा हूं, लेकिन यह एन-ग्राम के चरित्र अनुक्रम प्रदान करता है और मुझे एन-ग्राम शब्द अनुक्रम चाहिए।

वेब के समाधान से एकत्रित समाधान "एक वाक्य से एन-ग्राम पीढ़ी"

आप शिंगलेफ़िल्टर की तलाश में हैं

अद्यतन: 3.0.2 संस्करण के लिए लिंक अंक। यह वर्ग ल्यूसीन के नए संस्करण में अलग-अलग पैकेज में हो सकता है

मेरा मानना ​​है कि यह वह करना होगा जो आप चाहते हैं:

 import java.util.*; public class Test { public static List<String> ngrams(int n, String str) { List<String> ngrams = new ArrayList<String>(); String[] words = str.split(" "); for (int i = 0; i < words.length - n + 1; i++) ngrams.add(concat(words, i, i+n)); return ngrams; } public static String concat(String[] words, int start, int end) { StringBuilder sb = new StringBuilder(); for (int i = start; i < end; i++) sb.append((i > start ? " " : "") + words[i]); return sb.toString(); } public static void main(String[] args) { for (int n = 1; n <= 3; n++) { for (String ngram : ngrams(n, "This is my car.")) System.out.println(ngram); System.out.println(); } } } 

आउटपुट:

 This is my car. This is is my my car. This is my is my car. 

एक "ऑन-डिमांड" समाधान एक इटरेटर के रूप में लागू किया गया है:

 class NgramIterator implements Iterator<String> { String[] words; int pos = 0, n; public NgramIterator(int n, String str) { this.n = n; words = str.split(" "); } public boolean hasNext() { return pos < words.length - n + 1; } public String next() { StringBuilder sb = new StringBuilder(); for (int i = pos; i < pos + n; i++) sb.append((i > pos ? " " : "") + words[i]); pos++; return sb.toString(); } public void remove() { throw new UnsupportedOperationException(); } } 

यह कोड दी गई लंबाई के सभी स्ट्रिंग की एक सरणी देता है:

 public static String[] ngrams(String s, int len) { String[] parts = s.split(" "); String[] result = new String[parts.length - len + 1]; for(int i = 0; i < parts.length - len + 1; i++) { StringBuilder sb = new StringBuilder(); for(int k = 0; k < len; k++) { if(k > 0) sb.append(' '); sb.append(parts[i+k]); } result[i] = sb.toString(); } return result; } 

उदाहरण के लिए

 System.out.println(Arrays.toString(ngrams("This is my car", 2))); //--> [This is, is my, my car] System.out.println(Arrays.toString(ngrams("This is my car", 3))); //--> [This is my, is my car] 
 /** * * @param sentence should has at least one string * @param maxGramSize should be 1 at least * @return set of continuous word n-grams up to maxGramSize from the sentence */ public static List<String> generateNgramsUpto(String str, int maxGramSize) { List<String> sentence = Arrays.asList(str.split("[\\W+]")); List<String> ngrams = new ArrayList<String>(); int ngramSize = 0; StringBuilder sb = null; //sentence becomes ngrams for (ListIterator<String> it = sentence.listIterator(); it.hasNext();) { String word = (String) it.next(); //1- add the word itself sb = new StringBuilder(word); ngrams.add(word); ngramSize=1; it.previous(); //2- insert prevs of the word and add those too while(it.hasPrevious() && ngramSize<maxGramSize){ sb.insert(0,' '); sb.insert(0,it.previous()); ngrams.add(sb.toString()); ngramSize++; } //go back to initial position while(ngramSize>0){ ngramSize--; it.next(); } } return ngrams; } 

कॉल करें:

 long startTime = System.currentTimeMillis(); ngrams = ToolSet.generateNgramsUpto("This is my car.", 3); long stopTime = System.currentTimeMillis(); System.out.println("My time = "+(stopTime-startTime)+" ms with ngramsize = "+ngrams.size()); System.out.println(ngrams.toString()); 

आउटपुट:

मेरा समय = 1 एमएस ngramsize = 9 [यह, है, मेरा, मेरा है, यह मेरी, कार है, मेरी कार, मेरी कार है]

  public static void CreateNgram(ArrayList<String> list, int cutoff) { try { NGramModel ngramModel = new NGramModel(); POSModel model = new POSModelLoader().load(new File("en-pos-maxent.bin")); PerformanceMonitor perfMon = new PerformanceMonitor(System.err, "sent"); POSTaggerME tagger = new POSTaggerME(model); perfMon.start(); for(int i = 0; i<list.size(); i++) { String inputString = list.get(i); ObjectStream<String> lineStream = new PlainTextByLineStream(new StringReader(inputString)); String line; while ((line = lineStream.read()) != null) { String whitespaceTokenizerLine[] = WhitespaceTokenizer.INSTANCE.tokenize(line); String[] tags = tagger.tag(whitespaceTokenizerLine); POSSample sample = new POSSample(whitespaceTokenizerLine, tags); perfMon.incrementCounter(); String words[] = sample.getSentence(); if(words.length > 0) { for(int k = 2; k< 4; k++) { ngramModel.add(new StringList(words), k, k); } } } } ngramModel.cutoff(cutoff, Integer.MAX_VALUE); Iterator<StringList> it = ngramModel.iterator(); while(it.hasNext()) { StringList strList = it.next(); System.out.println(strList.toString()); } perfMon.stopAndPrintFinalResult(); }catch(Exception e) { System.out.println(e.toString()); } } 

एन-ग्राम बनाने के लिए यहां मेरे कोड हैं I इस मामले में, n = 2, 3. शब्द अनुक्रम के एन-ग्राम जो कटऑफ वैल्यू से छोटा परिणाम सेट से अनदेखा करेगा। इनपुट वाक्यों की सूची है, फिर यह OpenNLP के एक उपकरण का उपयोग करके पार्स करता है

 public static void main(String[] args) { String[] words = "This is my car.".split(" "); for (int n = 0; n < 3; n++) { List<String> list = ngrams(n, words); for (String ngram : list) { System.out.println(ngram); } System.out.println(); } } public static List<String> ngrams(int stepSize, String[] words) { List<String> ngrams = new ArrayList<String>(); for (int i = 0; i < words.length-stepSize; i++) { String initialWord = ""; int internalCount = i; int internalStepSize = i + stepSize; while (internalCount <= internalStepSize && internalCount < words.length) { initialWord = initialWord+" " + words[internalCount]; ++internalCount; } ngrams.add(initialWord); } return ngrams; }