Program odczytujący zdania z pliku

0

Witam
Jestem tu nowy i nie mam zbyt dużego doświadczenia w Javie.
Na studiach dostałem do napisania program, który będzie odczytywał z pliku zdania.
Kiedy przeszukuje fora to znajduje głównie rozwiązania z nową linią,
a mi bardzie zależy na przypisywanie zdań kiedy jest zakończony "." itp z warunkami. (Warunki już raczej sam ogarnę).

Np:

Ala ma kota
kot ma ale.

Ma być jako 1 zdanie.

Dodatkowo muszę zapisać to w XML.
Do zapisania jeszcze się nie zabierałem.

Ja widzę to w taki sposób mam tablicę, do której wpisuje poszczególne stringi, które są zdaniami.
Następnie przekazuje tablice za pomocą fora do zapisania na XML.

Ktoś może mi pomóc? Nie chce gotowego programu, ale takiego prowadzenia za rączkę jeśli się da

dodanie znacznika <code class="none"> - @furious programming

1

Następny Użyć StAX czy DOM ? ? ;]

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
 
class Word implements Comparable<Word>{
    private final String word;
 
    Word(String word) {
        this.word = word;
    }
 
    @Override
    public int compareTo(Word o) {
        return word.compareTo(o.word);
    }
 
    @Override
    public String toString() {
        return word;
    }
}
 
class Sentence {
    private final List<Word> words;
 
    Sentence(List<Word> words) {
        Collections.sort(words);
        this.words = words;
    }
 
    public List<Word> getWords(){
        return words;
    }
}
 
interface Converter{
    String convert(Sentence sentence);
}
 
class CSVConverter implements Converter{
 
    @Override
    public String convert(Sentence sentence){
        return sentence.getWords().stream().map(Object::toString).collect(Collectors.joining(","))+"\n";
    }
}
 
class XMLConverter implements Converter{
 
    @Override
    public String convert(Sentence sentence){
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("<sentence>\n");
        for(Word word : sentence.getWords()){
            stringBuilder.append("\t<word>");
            stringBuilder.append(word);
            stringBuilder.append("</word>\n");
        }
        stringBuilder.append("</sentence>\n");
        return stringBuilder.toString();
    }
}
 
public class Test {
    public static void main(String[] args) throws IOException {
        Pattern unicodeWord = Pattern.compile("\\w+", Pattern.UNICODE_CHARACTER_CLASS);
        Converter converter = new CSVConverter();
        converter = new XMLConverter();
 
        Files.lines(Paths.get("tekst.txt"))
                .map(line -> line.toLowerCase().replaceAll("\\s+", " "))
                .flatMap(line -> Arrays.stream(line.split("[\\.!?]")))
                .map(sentence -> Arrays.stream(sentence.split(" "))
                                .filter(word -> unicodeWord.matcher(word).matches())
                                .map(Word::new)
                                .collect(Collectors.toList())
                )
                .filter(list -> list.size()>0)
                .map(Sentence::new)
                .map(converter::convert)
                .forEach(System.out::print);
 
        System.out.println();
    }
}

Ale to akurat zakłada że zdania nie są tak dziwnie pocięte między liniami.

0

Jestem zielony więc obojętnie. Ale kod przesłany przez ciebie daje taki wynik:

<sentence>
	<word>chce</word>
	<word>komisji</word>
	<word>minister</word>
	<word>nie</word>
	<word>powolania</word>
	<word>sejmowej</word>
	<word>sledczej</word>
</sentence>
.
.
.

zamiast

<cos>Minister nie chce powolania sejmowej komisji sledczej</cos>
<cos>Minister nie chce powolania sejmowej komisji sledczej</cos>

I nie radzi sobie z polskimi znakami

dodanie znaczników <code class="xml"> - @furious programming

1 użytkowników online, w tym zalogowanych: 0, gości: 1