I'm calling a method, that does an SQL UPDATE on a single dataset in a DB2 database. The method is called automatically in different threads after receiving message from an ActiveMQ queue. It is called 5 times in 2 seconds, but because the first call sets a WRITE-Lock on the dataset, the next 3 calls have to wait. After the first call finishes the update, the second call is not executing the update, instead, a new method call (the 5th call in the row) runs through. The Problem is, that the three calls in between are not recognizing, that the WRITE-Lock was released, and are throwing a SQLException with error SQL0913 after a timeout of 1 minute.
Caused by: java.sql.SQLException: [SQL0913] Zeile oder Objekt PR1BAFPU5 der Art *FILE in DAKDTA wird verwendet. Ursache . . . . : Das angeforderte Objekt PR1BAFPU5 der Art *FILE in der Bibliothek DAKDTA wird gerade von einem anderen Anwendungsprozess verwendet, oder eine Zeile im Objekt wird von einem anderen Anwendungsprozess oder einem anderen Cursor in diesem Anwendungsprozess verwendet. Fehlerbeseitigung: Die vorherigen Nachrichten im Jobprotokoll aufrufen (Befehl DSPJOBLOG) oder im interaktiven SQL F10 (Nachrichten im Jobprotokoll anzeigen) in dieser Anzeige drücken, um zu bestimmen, ob es sich um eine Wartezeitüberschreitung für eine Objekt- oder Satzsperre handelt. Einen der folgenden Schritte durchführen: -- Wird ein Objekt durch einen anderen Anwendungsprozess gesperrt, die SQL-Anweisung wiederholen, wenn das Objekt nicht verwendet wird. Mit dem Befehl WRKOBJLCK (Mit Objektsperren arbeiten) kann festgestellt werden, von wem das Objekt gerade verwendet wird. -- Ist das Objekt ein Schema und wurde versucht, in diesem Schema eine Tabelle, eine Sicht oder einen Index unter COMMIT-Steuerung zu erstellen, wird möglicherweise für dieses Schema gerade eine Operation zum "Sichern im aktiven Zustand" von einem anderen Job im System durchgeführt. Ist die Operation zum "Sichern im aktiven Zustand" abgeschlossen, die Anforderung wiederholen. -- Wird ein Satz durch einen anderen Anwendungsprozess gesperrt, die SQL-Anweisung wiederholen, wenn der Satz nicht verwendet wird. Mit dem Befehl DSPRCDLCK (Satzsperren anzeigen)kann festgestellt werden, von wem der Satz gerade verwendet wird. -- Wird der Satz von einem anderen Cursor in demselben Anwendungsprozess gesperrt, muss eine Anweisung COMMIT, ROLLBACK oder eine andere Anweisung FETCH für den Cursor ausgegeben werden, der die Sperre verursacht, bevor diese SQL-Anweisung ausgegeben wird. Tritt dieser Fehler häufig auf, mit dem Befehl CHGPF (Physische Datei ändern), CHGLF (Logische Datei ändern) oder OVRDBF (Datenbankdatei überschreiben) die Wartezeitüberschreitung für das Objekt oder den Satz ändern.
at com.ibm.as400.access.JDError.createSQLExceptionSubClass(JDError.java:860) [jt400-jdbc4-7.8.jar:JTOpen 7.8]
at com.ibm.as400.access.JDError.throwSQLException(JDError.java:692) [jt400-jdbc4-7.8.jar:JTOpen 7.8]
at com.ibm.as400.access.JDError.throwSQLException(JDError.java:662) [jt400-jdbc4-7.8.jar:JTOpen 7.8]
at com.ibm.as400.access.AS400JDBCStatement.commonExecute(AS400JDBCStatement.java:1025) [jt400-jdbc4-7.8.jar:JTOpen 7.8]
at com.ibm.as400.access.AS400JDBCPreparedStatement.executeUpdate(AS400JDBCPreparedStatement.java:1649) [jt400-jdbc4-7.8.jar:JTOpen 7.8]
at org.jboss.jca.adapters.jdbc.WrappedPreparedStatement.executeUpdate(WrappedPreparedStatement.java:493)
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:186) [hibernate-core-4.2.27.Final-redhat-1.jar:4.2.27.Final-redhat-1]
... 143 more
The database is a IBM DB2 database (version 7.2), and my program is running on a JBoss EAP-6.4. From the logs, it looks like that the first call takes several seconds to execute, in between the next three calls are waiting for the first one. But after the first one finished execution, the next three calls are not proceeding.
public void updateBerthTimeConflictFlag4BerthArrival(boolean conflict, String berthArrivalId) {
Query updateQuery = em.createNativeQuery("update PR1BERTHARRIVAL_FLZ set berthTimeConflict = :conflict where id = :id");
updateQuery.setParameter("conflict", conflict ? 1 : 0);
updateQuery.setParameter("id", berthArrivalId);
updateQuery.executeUpdate();
}
I would expect, that after the first call finishes, the next three calls of the SQL update are executed in the order of the call.
We had the same problem times ago, and we follow this:
Problem(Abstract)
When an application reads a number of records using JDBC from a table and uses a BMP entity bean to delete the records from the table, the error "java.sql.SQLException: [SQL0913] Row or object F55500 in type *FILE in use" occurs.
Cause
The exception indicates that the rows or objects are in use.
Resolving the problem
In the JDBC program that reads a number of records, you need to ensure that all connections are closed so that all resources are released.
If there is no direct way for releasing the connection, restarting the database would remove any open connections but this would be a last measure if there is no other alternative for release the connections.
Instead of using a JDBC program, create a separate session bean to contain the query to the database. The session bean should have a transaction setting of RequiresNew. The SQL statement now runs in a new separate transaction. Once the method has completed running, the transaction is ended and the tables are freed to be used by the BMP entity beans to delete.
Here the original technote
I am currently working on a Java project with python integration.
For that purpose I am using the following packages and ide:
Eclipse luna
Jython 2.7.0
TextBlob v0.10.0-dev
Here is my java code-snippet:
PythonInterpreter interpreter = new PythonInterpreter();
interpreter.execfile("AnSoMiaPy/analyser/test1.py");
PyObject translated_text = interpreter.get("translated_text");
interpreter.close();
System.out.println("translated_text: " + translated_text.toString());
The python code is also fairly simply.
#!/usr/bin/python
# -*- coding: UTF-8 -*-
from textblob import TextBlob
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
text = '''
The titular threat of The Blob has always struck me as the ultimate movie
monster: an insatiably hungry, amoeba-like mass able to penetrate
virtually any safeguard, capable of--as a doomed doctor chillingly
describes it--"assimilating flesh on contact.
Snide comparisons to gelatin be damned, it's a concept with the most
devastating of potential consequences, not unlike the grey goo scenario
proposed by technological theorists fearful of
artificial intelligence run rampant.
'''
blob = TextBlob(text)
blob.noun_phrases # WordList(['titular threat', 'blob',
# 'ultimate movie monster',
# 'amoeba-like mass', ...])
for sentence in blob.sentences:
print(sentence.sentiment.polarity)
# 0.060
# -0.341
translated_text = blob.translate(to="de")
print(translated_text)
print blob.sentiment.polarity
When I am executing the python code I get what I expect:
0.06
-0.341666666667
Der Titular Bedrohung des BLOB hat mich als die ultimative Film immer geschlagen
Monster: ein unersättlich hungrig, amöbenartige Masse in der Lage, zu durchdringen
praktisch jede Sicherung, in der Lage ist - als Untergang geweihten Arzt unterkühlt
es beschreibt - "assimilieren Fleisch auf Kontakt.
Abfällige Vergleiche zu Gelatine verdammt sein, es ist ein Konzept, mit dem die meisten
verheerende der möglichen Folgen, nicht anders als die graue Schmiere-Szenario
durch technologische Theoretiker fürchten vorgeschlagen
künstliche Intelligenz wuchern.
-0.159090909091
However, when I call the python-script with jython I am getting the following result:
0.0
0.0
Der Titular Bedrohung des BLOB hat mich als die ultimative Film immer geschlagen
Monster: ein unersättlich hungrig, amöbenartige Masse in der Lage, zu durchdringen
praktisch jede Sicherung, in der Lage ist - als Untergang geweihten Arzt unterkühlt
es beschreibt - "assimilieren Fleisch auf Kontakt.
Abfällige Vergleiche zu Gelatine verdammt sein, es ist ein Konzept, mit dem die meisten
verheerende der möglichen Folgen, nicht anders als die graue Schmiere-Szenario
durch technologische Theoretiker fürchten vorgeschlagen
künstliche Intelligenz wuchern.
0.0
translated_text: TextBlob("Der Titular Bedrohung des BLOB hat mich als die ultimative Film immer geschlagen
Monster: ein unersättlich hungrig, amöbenartige Masse in der Lage, zu durchdringen
praktisch jede Sicherung, in der Lage ist - als Untergang geweihten Arzt unterkühlt
es beschreibt - "assimilieren Fleisch auf Kontakt.
Abfällige Vergleiche zu Gelatine verdammt sein, es ist ein Konzept, mit dem die meisten
verheerende der möglichen Folgen, nicht anders als die graue Schmiere-Szenario
durch technologische Theoretiker fürchten vorgeschlagen
künstliche Intelligenz wuchern.")
The sentiment.polarity is suddenly 0 and after accessing the translated variable in java and printing it the ascii encoding looks a bit weird.
Has anyone experienced a similar problem?
I have been trying for several days to write a search function where you can enter multiple keywords to output all lines that have these words stored in the respective column.
Searching for a single term is not a problem.
Here is my code:
private void StartSearchTagsTextKeyPressed(java.awt.event.KeyEvent evt) {
if (evt.getKeyCode()==KeyEvent.VK_ENTER) {
try {
String sql = "SELECT ID, Titel, Autor, Regal, Fach, Gelesen, Tags FROM TableDB WHERE UPPER(Tags) LIKE UPPER(?) "; // hinter select kommt entweder ein * wenn alle spalteninhalte angezeigt werden sollen oder der jeweilige spaltenname welche angezeigt werden sollen
pst = conn.prepareStatement(sql);
pst.setString (1, "%" +StartSearchTagsText.getText()+ "%");
rs= pst.executeQuery ();
StartTable.setModel (DbUtils.resultSetToTableModel(rs));
pst.close();
StartSearchTagsText.setText("");
}
catch (SQLException e) {
JOptionPane.showMessageDialog (null, "searchtagskey");
}
}
}
I hope someone has a suggestion.
String searchterm1 = "Herrmann";
String searchterm2 = "Die kleine Hexe";
String sql = "Select * from TableDB where Autor like ? and Titel like ?";
pst = conn.prepareStatement(sql);
pst.setString (1, searchterm1);
pst.setString (2, searchterm2);
It should work like that.
This should be the simplest solution. If you can tell us what DBMS you are using we might be able to make it shorter depending on the system used.
First of all: LIKE only works with a single value for each evaluation it does. You can't separate it by commas like in the IN statement for example.
Therefore I'd suggest that you split the value of StartSearchTagsText.getText() into an array using the the .split("DELIMITER") function.
Then you can use a loop to add "OR LIKE %" + yourArray[i] + "%" to your sql String for every term you want to search for. (lose the OR for the first pass of the loop)
Du kannst mit LIKE nicht mehrere Bedingungen evaluieren, wie es z.B. mit IN geht.
Ich würde vorschlagen, dass du dir ein Array mit den gesplitteten Werten deines Textfeldes erzeugst. Das geht mit .split("TRENNUNGSZEICHEN"). Das Trennungszeichen musst du entsprechend anpassen. Wenn ein Komma die einzelnen Wörter nach denen du suchen willst separiert, dann schreibst du statt TRENNUNGSZEICHEN entsprechend ein , in die Klammer.
Sobald du das Array hast, kannst du es einfach komplett durchlaufen und bei jedem Durchlauf dein SQL-Statement mit "OR LIKE %" + deinArray[i] + "%"erweitern. Beim ersten Durchlauf das OR weglassen. Dann liefert dir das SELECT alle Datensätze zurück, was einem der Begriffe aus deinem Textfeld entspricht.
I have a pdf document whose font type is OpenType (Garamond OpenType). So the pdfBox text extraction can also extract special characters (for example small capital lettres), which caused problems when the underlying font has been a simple Type1 font.
However, the text extraction now causes another type of problem. In my case, when the charater sequences "fi" or "fl" occur in the text, the PDFTextStripper#getText(PDDocument doc) extracts them as single characters: 'fi' and 'fl' and sets a space character on their right side.
(Surprisingly, if I access the list of characters of a page via the charactersByArticle field of PDFTextStripper / via the PDFTextStripper#processText(TextPosition pos) method, the same characters show up as 'normal-single' characters f i / f l).
My assumption is that the advantage of the underlying OpenFont type turns into this particular disadvantage, because the PDFTextStripper recognizes the character sequence f i / f l as special charcters fi / fl (- what might have to do with the fact, that the getText() method calculates things like whitespace characters by distances / positional placements).
Background: The given document is a wordbook text with very dense printed text.
My question: is there anything what I can do to avoid this problem?
thanks in advance ...
EDIT:
#mkl Here is a simple code-snippet (for testing-purposes only):
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Vector;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.util.PDFTextStripper;
import org.apache.pdfbox.util.TextPosition;
public class PDFTextStripperOpenFontTest extends PDFTextStripper {
public PDFTextStripperOpenFontTest(String encoding) throws IOException {
super(encoding);
}
public static void main(String[] args) throws IOException {
String fileName = "filename";
PDFTextStripperOpenFontTest stripper = new PDFTextStripperOpenFontTest("UTF-8");
stripper.setSortByPosition(false);
PDDocument doc = PDDocument.load(new File(fileName));
stripper.setStartPage(1);
stripper.setEndPage(1);
//extract text by getText(doc)
String text1 = stripper.getText(doc);
text1 = text1.replaceAll("\\r|\\n", "");
System.out.println(text1);
//extract text by
StringBuilder sb = new StringBuilder();
Vector<List<TextPosition>> list = stripper.getCharactersByArticle();
for (List<TextPosition> list2 : list)
for (TextPosition textPosition : list2)
sb.append(textPosition.getCharacter());
System.out.println(sb.toString());
doc.close();
}
}
And here is the output for the test file (the differences begin in the second half of the page):
des Verhältnisses von Individuum und Gesellschaft habe (vgl. Holzkamp-Osterkamp 1976, Kap. 5.2). Er schlug allerdings vor, Sigmund Freuds persön-lichkeitstheoretische Konzeptionen »der Abwehr-vorgänge, der Angst und des Unbewussten« mit historisch bestimmten gesellschaftlichen Verhältnis-sen zu vermitteln (255f) und sie subjektwissenschaft-lich zu reinterpretieren. »Freuds Prämissen von der genuinen Unvereinbarkeit subjektiver Lebensan-sprüche mit gesellschaftlichen Anforderungen« sind für Holzkamp mehr als eine »falsche Universali-sierung bürgerlich-kapitalistischer Verhältnisse«, sie brächten auch »bestimmte Aspekte der subjektiven Situation der Menschen unter diesen Verhältnissen […] differenziert und schonungslos« auf den Begriff (1984, 33). Die Auffassung, dass die ich-psycholo-gische »›Soziologisierung‹« die »Schärfe und Uner-bittlichkeit« der Psychoanalyse »verkleistert« (ebd.), teilt er mit Adorno, der darin deren »Kastrierung« behauptet (1952, 25).3. Die Entwicklung einer eigenständigen KP begann mit dem Problem, allein auf der Basis der marx-schen KrpÖ verschiedene Ansätze und Befunde der »bürgerlichen« Psychologie nicht »differenziell«, d.h. nach ihrem jeweiligen Verhältnis von Erkennt-nismöglichkeiten und -grenzen beurteilen und somit nicht kritisch-psychologisch aufheben zu können (Maiers 1979). »Positive Ergebnisse über die empi-rische Subjektivität des Menschen in der bürgerlichen Gesellschaft« (Holzkamp 1978, 249) versprachen zwei Wege historisch-rekonstruktiver Forschung: wissenschaftsbezogen zu untersuchen, wie es dazu kam, dass im 19. Jh. »empirische Subjektivität« auf eine Weise problematisch wurde, die zur Entstehung der Einzelwissenschaft »Psychologie« führte (1973, 45); und gegenstandsbezogen die Grundlagen der menschlichen Subjektivität von der Entstehung des Psychischen über das Tier-Mensch-Übergangsfeld bis zur Existenz in kapitalistischen Verhältnissen zu analysieren (46f). Während der erste Weg im Umkreis der KP v.a. von Siegfried Jaeger und Irmingard Staeuble (1978) verfolgt wurde, konzentrierte sich der Kreis um Holzkamp zunächst auf den zweiten. Holzkamp resümiert später, dass »die Unterscheidung zwischen wissenschafts- und gegenstandsbezogener Kategorialanalyse nur ›aspekthafter‹ Natur ist« (1983, 37). Problematisch bleibt, inwieweit die Begriffe, von denen auch die Rekonstruktion des Psychischen ihren Ausgang nehmen muss, diese formieren (Fries 2011). Insofern müssen bei einer »vollständigen his-torischen Analyse« die betreffenden psychologischen Konzepte »›im Schnittpunkt‹« beider »Entwicklungs-züge« begriffen werden (Holzkamp 1973, 47).4. Der Anspruch der historischen Rekonstruktion des Psychischen ist es, die auf einen vorparadigma-tischen (Métraux 1981; Graumann 1994) Zustand der Psychologie verweisende »Beliebigkeit« (Holz-kamp 1977b) der Begriffsbildung zu überwinden und die Psychologie kategorial neu zu begründen. Termi-nologisch ist es schwierig, dass in der KP die Bezeich-nung wissenschaftlich ausgewiesener Grundbegriffe als »Kategorien« (programmatisch Holzkamp 1983, 19 u. 27) im Gegensatz zur Verwendungsweise bei Marx steht, der damit gerade Alltagsvorstellun-gen meint (vgl. W.F.Haug 2008), die wiederum bei Holzkamp als »Vorbegriffe« (1983, 48ff u. 515ff) bezeichnet werden.4.1 In einer Spezifi zierung des logisch-historischen Herangehens ging es der KP darum, das Verhältnis von Natur-, Gesellschafts- und Individualgeschichte begriffl ich so aufzuklären, dass dem entwicklungs-geschichtlich Früheren das begriffl ich Allgemeinere und dem entwicklungsgeschichtlich Späteren das begriffl ich Spezifi schere entsprechen soll. Dies als eine Grundlage dafür, sowohl Anthropomorphisie-rungen tierischen Verhaltens als auch Biologisierun-gen gesellschaftlicher Verhältnisse bzw. menschlichen Handelns und Erlebens und damit Universalisierun-gen historisch spezifi scher Ausdrucksformen des Psychischen zu vermeiden. Die KP schloss an Arbei-ten der »Kulturhistorischen Schule« an, bes. an Alexej N. Leontjews 1959 veröffentlichtes »historisches Herangehen an die Untersuchungen der mensch-lichen Psyche« (1973, 262ff; vgl. Holzkamp 1983, 47). Gegen dessen Durchführung wandten Holz-kamp und Volker Schurig (1973, XLVI) jedoch ein, dass der Gedanke der Historizität des Psychischen in Leontjews »Forschungsarbeit nicht überall mit gleicher Entschiedenheit Berücksichtigung« gefun-den habe, die Gesellschaftlichkeit des Menschen zwar allgemein bestimmt, nicht aber formationsspe-zifi sch auf gesellschaftliche Widersprüche in der SU konkretisiert worden sei. – In der KP bestanden mit Blick auf die DDR, der Holzkamp eine »systembe-dingte Konvergenz zwischen allgemeinen und indi-viduellen Interessen« (1983, 382) attestierte, ähnliche Neigungen zur Widerspruchseliminierung, die von der Hoffnung auf dortige Publikationszustimmung genährt waren (vgl. Markard 2009a, 199f).4.2 Soweit sich die Kategorialanalyse auf biologi-sche Evolutionsprozesse bezieht, wird sie als »funk-tional-historisch« charakterisiert (Maiers 1999). Sie zielt auf die Rekonstruktion von Widersprüchen in Organismus-Umwelt-Konstellationen, aus denen Entwicklungen und neue Qualitäten in ihrer biolo-gischen Funktionalität begreifbar werden – bezogen auf jene Evolutionsreihe, die zum Menschen hin-führt, unter dem Gesichtspunkt der Entstehung und Kritische Psychologie 171 172
des Verhältnisses von Individuum und Gesellschaft habe (vgl. Holzkamp-Osterkamp 1976, Kap. 5.2). Er schlug allerdings vor, Sigmund Freuds persön-lichkeitstheoretische Konzeptionen »der Abwehr-vorgänge, der Angst und des Unbewussten« mit historisch bestimmten gesellschaftlichen Verhältnis-sen zu vermitteln (255f) und sie subjektwissenschaft-lich zu reinterpretieren. »Freuds Prämissen von der genuinen Unvereinbarkeit subjektiver Lebensan-sprüche mit gesellschaftlichen Anforderungen« sind für Holzkamp mehr als eine »falsche Universali-sierung bürgerlich-kapitalistischer Verhältnisse«, sie brächten auch »bestimmte Aspekte der subjektiven Situation der Menschen unter diesen Verhältnissen […] differenziert und schonungslos« auf den Begriff (1984, 33). Die Auffassung, dass die ich-psycholo-gische »›Soziologisierung‹« die »Schärfe und Uner-bittlichkeit« der Psychoanalyse »verkleistert« (ebd.), teilt er mit Adorno, der darin deren »Kastrierung« behauptet (1952, 25).3. Die Entwicklung einer eigenständigen KP begann mit dem Problem, allein auf der Basis der marx-schen KrpÖ verschiedene Ansätze und Befunde der »bürgerlichen« Psychologie nicht »differenziell«, d.h. nach ihrem jeweiligen Verhältnis von Erkennt-nismöglichkeiten und -grenzen beurteilen und somit nicht kritisch-psychologisch aufheben zu können (Maiers 1979). »Positive Ergebnisse über die empi-rische Subjektivität des Menschen in der bürgerlichen Gesellschaft« (Holzkamp 1978, 249) versprachen zwei Wege historisch-rekonstruktiver Forschung: wissenschaftsbezogen zu untersuchen, wie es dazu kam, dass im 19. Jh. »empirische Subjektivität« auf eine Weise problematisch wurde, die zur Entstehung der Einzelwissenschaft »Psychologie« führte (1973, 45); und gegenstandsbezogen die Grundlagen der menschlichen Subjektivität von der Entstehung des Psychischen über das Tier-Mensch-Übergangsfeld bis zur Existenz in kapitalistischen Verhältnissen zu analysieren (46f). Während der erste Weg im Umkreis der KP v.a. von Siegfried Jaeger und Irmingard Staeuble (1978) verfolgt wurde, konzentrierte sich der Kreis um Holzkamp zunächst auf den zweiten. Holzkamp resümiert später, dass »die Unterscheidung zwischen wissenschafts- und gegenstandsbezogener Kategorialanalyse nur ›aspekthafter‹ Natur ist« (1983, 37). Problematisch bleibt, inwieweit die Begriffe, von denen auch die Rekonstruktion des Psychischen ihren Ausgang nehmen muss, diese formieren (Fries 2011). Insofern müssen bei einer »vollständigen his-torischen Analyse« die betreffenden psychologischen Konzepte »›im Schnittpunkt‹« beider »Entwicklungs-züge« begriffen werden (Holzkamp 1973, 47).4. Der Anspruch der historischen Rekonstruktion des Psychischen ist es, die auf einen vorparadigma-tischen (Métraux 1981; Graumann 1994) Zustand der Psychologie verweisende »Beliebigkeit« (Holz-kamp 1977b) der Begriffsbildung zu überwinden und die Psychologie kategorial neu zu begründen. Termi-nologisch ist es schwierig, dass in der KP die Bezeich-nung wissenschaftlich ausgewiesener Grundbegriffe als »Kategorien« (programmatisch Holzkamp 1983, 19 u. 27) im Gegensatz zur Verwendungsweise bei Marx steht, der damit gerade Alltagsvorstellun-gen meint (vgl. W.F.Haug 2008), die wiederum bei Holzkamp als »Vorbegriffe« (1983, 48ff u. 515ff) bezeichnet werden.4.1 In einer Spezifi zierung des logisch-historischen Herangehens ging es der KP darum, das Verhältnis von Natur-, Gesellschafts- und Individualgeschichte begriffl ich so aufzuklären, dass dem entwicklungs-geschichtlich Früheren das begriffl ich Allgemeinere und dem entwicklungsgeschichtlich Späteren das begriffl ich Spezifi schere entsprechen soll. Dies als eine Grundlage dafür, sowohl Anthropomorphisie-rungen tierischen Verhaltens als auch Biologisierun-gen gesellschaftlicher Verhältnisse bzw. menschlichen Handelns und Erlebens und damit Universalisierun-gen historisch spezifi scher Ausdrucksformen des Psychischen zu vermeiden. Die KP schloss an Arbei-ten der »Kulturhistorischen Schule« an, bes. an Alexej N. Leontjews 1959 veröffentlichtes »historisches Herangehen an die Untersuchungen der mensch-lichen Psyche« (1973, 262ff; vgl. Holzkamp 1983, 47). Gegen dessen Durchführung wandten Holz-kamp und Volker Schurig (1973, XLVI) jedoch ein, dass der Gedanke der Historizität des Psychischen in Leontjews »Forschungsarbeit nicht überall mit gleicher Entschiedenheit Berücksichtigung« gefun-den habe, die Gesellschaftlichkeit des Menschen zwar allgemein bestimmt, nicht aber formationsspe-zifi sch auf gesellschaftliche Widersprüche in der SU konkretisiert worden sei. – In der KP bestanden mit Blick auf die DDR, der Holzkamp eine »systembe-dingte Konvergenz zwischen allgemeinen und indi-viduellen Interessen« (1983, 382) attestierte, ähnliche Neigungen zur Widerspruchseliminierung, die von der Hoffnung auf dortige Publikationszustimmung genährt waren (vgl. Markard 2009a, 199f).4.2 Soweit sich die Kategorialanalyse auf biologi-sche Evolutionsprozesse bezieht, wird sie als »funk-tional-historisch« charakterisiert (Maiers 1999). Sie zielt auf die Rekonstruktion von Widersprüchen in Organismus-Umwelt-Konstellationen, aus denen Entwicklungen und neue Qualitäten in ihrer biolo-gischen Funktionalität begreifbar werden – bezogen auf jene Evolutionsreihe, die zum Menschen hin-führt, unter dem Gesichtspunkt der Entstehung und Kritische Psychologie 171 172
you can find the pdf-file used for this test under this link:
https://issues.apache.org/jira/browse/PDFBOX-2548.
I added a second test page, from a former volume of the same wordbook. For this volume, a Type1 font has been used. I chose a page where the two words "begrifflich" and "spezifisch" occur (they cause problems as you can see in the first test). As you can see/test, the described error doesn't occur when extracting the text of this second page! This strenghens my assumption that the OpenType format is the reason for the occuring error.
Here is the second output:
ehrenamtliche Arbeit, Eigenarbeit, Elend, Exklusion,Gemeinwesen, Genossenschaft, Kommunalpolitik, Kom-munitarismus, Nachbarschaftsbewegung, neue sozialeBewegungen, Owenismus, Selbstverwaltung, Sozialarbeit,Sozialfürsorge, Sozialpolitik, Sozialstaat, Wohlfahrtsstaat,WohnungsfrageGemeinwirtschaftA: al-iqisäd at-ta’äwuni.– E: communal economy . –F: économie communautaire. –R: kooperativnoye khoziaysrvo. –S: economía comunitaria. – C: jiti jingjiDie Konzeption der ›G‹ ist nicht originär sozialistisch.Sie wurde erst nachträglich von der Arbeiterbewegungbegrifflich adaptiert und im Sinne eines nicht-kapita-listischen Wirtschaftssektors (v.a. gewerkschaftseigene,genossenschaftliche und öffentliche Unternehmen),der primär bedarfsorientiert und demokratisch kon-trolliert arbeiten sollte, in reformsozialistische Strate-gien integriert.In jeweils unterschiedlichen Formen und Strukturenhat sich seit Ende des 19. Jh. in den verschiedeneneuropäischen Ländern ein Unternehmenssektor mitnicht-kapitalistischen Eigentümern herausgebildet,in Gestalt staatlicher bzw. kommunaler und nicht-staatlicher Unternehmen. In Großbritannien entstandunter Einfluss des Munizipalsozialismus hauptsäch-lich ein kommunal-gemeinwirtschaftlicher Sektor;in Österreich versteht man unter G vorwiegend den(zentralisierten) Staatssektor. In Deutschland da-gegen hat die gewerkschaftlich organisierte Arbei-terbewegung selbst einen sog. freigemeinwirtschaft-lichen Sektor gefördert und zeitweilig aufgebaut,dessen Besonderheit eine Identifikation mit demenglischen ›social sector‹ oder dem französischen›secteur public‹ verbietet. So bezeichnet der Aus-druck im engeren Sinne eine spezifische, vornehmlichin Deutschland nach dem Ersten Weltkrieg geschaffeneRealität.1. Die Klassiker der deutschen G-Lehre (EugenDÜHRING, Albert SCHÄFFLE, Adolph WAGNER) gingendavon aus, dass in kapitalistischen Gesellschaften –um die Funktionsfähigkeit des marktwirtschaftlichenSystems zu gewährleisten – neben dem privatwirt-schaftlichen Sektor ein mehr oder weniger ausgedehn-ter gemeinwirtschaftlicher Sektor bestehen muss, dernicht profitorientiert ist, was Hans RITSCHL späterals »dualistische Wirtschaftsordnung« charakterisiert(1931). Die G umfasst für diese Tradition nicht nurstaatliche bzw. kommunale, sondern auch ›frei-gemeinwirtschaftliche‹ Unternehmen privater Trägerund Genossenschaften. Die klassische G-Lehre isteine harmonistische Konzeption (THIEMEYER 1980),die ein ›organisches‹ Nebeneinander von Privat- undGemeinwirtschaft anstrebt. Im System zunehmenderDominanz der Großindustrie und bei einer wach-senden und kämpferischen Arbeiterbewegung sollennicht-profitorientierte staatssozialistische Betriebefür sozialen Ausgleich sorgen und zur politischenEntspannung beitragen (SCHÄFFLE 1875).2. Bei MARX und ENGELS lassen sich nur wenige kon-zeptionelle Bezüge zur G-Lehre herstellen. Heftigpolemisiert Engels gegen DÜHRINGS auf die G-Kon-zeption zugeschnittene »Wirtschaftskommunen« (AD,MEW 20, 268ff). Bis zu dem Zeitpunkt, wo unterMarxisten reformistische Auffassungen an Bodengewinnen, besteht ein zentraler Gegensatz zwischenMarxismus und G-Lehre: den Klassikern des Marxis-mus kann in diesem Kontext der quasi umfassendsteG-Anspruch zugeschrieben werden (KÜHNE 1978),nämlich auf gesamtgesellschaftliche Verwirklichungeiner nicht-kapitalistischen G.Einzelne Formen der G werden von MARX undENGELS dem Inhalt nach angesprochen, etwa öffent-liche Unternehmen: so wird in den Forderungen derKommunistischen Partei in Deutschland 1848 dieVerstaatlichung des Transport-, Verkehrs- und Kom-munikationswesens verlangt, verbunden mit dempreispolitischen Konzept des ›Nulltarifs‹: die betref-fenden öffentlichen Dienstleistungen sollen »derunbemittelten Klasse zur unentgeltlichen Verfügunggestellt« werden (MEW 5, 4; vgl. 4, 373f).Die meisten der für die G-Thematik relevantenAusführungen beziehen sich auf genossenschaftlicharbeitende »Kooperativfabriken«. MARX widmet sichder Problematik von isolierten oder sektoral begrenz-ten Genossenschaftsunternehmen, die den privat-wirtschaftlichen ›Eigennutz‹ zunächst nur im Innen-verhältnis der Kooperativ-Mitglieder überwindenkönnen. Ein umfassendes und gesamtgesellschaftlichrationales System freier Kooperativarbeit hingegenlässt sich Marx zufolge nicht ohne gesellschaftlicheVeränderungen mit dem Übergang der Staatsmachtin die Hände der Produzenten selbst verwirklichen(Inauguraladresse, MEW 16, 11, 195f; Gotha, MEW19, 13-32). ENGELS spricht sich in späteren Jahrenmehrfach für genossenschaftliche Produktionsbe-triebe aus (z.B. MEW 36, 261, 426), freilich nicht imSinne einer harmonistischen G-Konzeption, bei der
ehrenamtliche Arbeit, Eigenarbeit, Elend, Exklusion,Gemeinwesen, Genossenschaft, Kommunalpolitik, Kom-munitarismus, Nachbarschaftsbewegung, neue sozialeBewegungen, Owenismus, Selbstverwaltung, Sozialarbeit,Sozialfürsorge, Sozialpolitik, Sozialstaat, Wohlfahrtsstaat,WohnungsfrageGemeinwirtschaftA: al-iqisäd at-ta’äwuni.– E: communal economy . –F: économie communautaire. –R: kooperativnoye khoziaysrvo. –S: economía comunitaria. – C: jiti jingjiDie Konzeption der ›G‹ ist nicht originär sozialistisch.Sie wurde erst nachträglich von der Arbeiterbewegungbegrifflich adaptiert und im Sinne eines nicht-kapita-listischen Wirtschaftssektors (v.a. gewerkschaftseigene,genossenschaftliche und öffentliche Unternehmen),der primär bedarfsorientiert und demokratisch kon-trolliert arbeiten sollte, in reformsozialistische Strate-gien integriert.In jeweils unterschiedlichen Formen und Strukturenhat sich seit Ende des 19. Jh. in den verschiedeneneuropäischen Ländern ein Unternehmenssektor mitnicht-kapitalistischen Eigentümern herausgebildet,in Gestalt staatlicher bzw. kommunaler und nicht-staatlicher Unternehmen. In Großbritannien entstandunter Einfluss des Munizipalsozialismus hauptsäch-lich ein kommunal-gemeinwirtschaftlicher Sektor;in Österreich versteht man unter G vorwiegend den(zentralisierten) Staatssektor. In Deutschland da-gegen hat die gewerkschaftlich organisierte Arbei-terbewegung selbst einen sog. freigemeinwirtschaft-lichen Sektor gefördert und zeitweilig aufgebaut,dessen Besonderheit eine Identifikation mit demenglischen ›social sector‹ oder dem französischen›secteur public‹ verbietet. So bezeichnet der Aus-druck im engeren Sinne eine spezifische, vornehmlichin Deutschland nach dem Ersten Weltkrieg geschaffeneRealität.1. Die Klassiker der deutschen G-Lehre (EugenDÜHRING, Albert SCHÄFFLE, Adolph WAGNER) gingendavon aus, dass in kapitalistischen Gesellschaften –um die Funktionsfähigkeit des marktwirtschaftlichenSystems zu gewährleisten – neben dem privatwirt-schaftlichen Sektor ein mehr oder weniger ausgedehn-ter gemeinwirtschaftlicher Sektor bestehen muss, dernicht profitorientiert ist, was Hans RITSCHL späterals »dualistische Wirtschaftsordnung« charakterisiert(1931). Die G umfasst für diese Tradition nicht nurstaatliche bzw. kommunale, sondern auch ›frei-gemeinwirtschaftliche‹ Unternehmen privater Trägerund Genossenschaften. Die klassische G-Lehre isteine harmonistische Konzeption (THIEMEYER 1980),die ein ›organisches‹ Nebeneinander von Privat- undGemeinwirtschaft anstrebt. Im System zunehmenderDominanz der Großindustrie und bei einer wach-senden und kämpferischen Arbeiterbewegung sollennicht-profitorientierte staatssozialistische Betriebefür sozialen Ausgleich sorgen und zur politischenEntspannung beitragen (SCHÄFFLE 1875).2. Bei MARX und ENGELS lassen sich nur wenige kon-zeptionelle Bezüge zur G-Lehre herstellen. Heftigpolemisiert Engels gegen DÜHRINGS auf die G-Kon-zeption zugeschnittene »Wirtschaftskommunen« (AD,MEW 20, 268ff). Bis zu dem Zeitpunkt, wo unterMarxisten reformistische Auffassungen an Bodengewinnen, besteht ein zentraler Gegensatz zwischenMarxismus und G-Lehre: den Klassikern des Marxis-mus kann in diesem Kontext der quasi umfassendsteG-Anspruch zugeschrieben werden (KÜHNE 1978),nämlich auf gesamtgesellschaftliche Verwirklichungeiner nicht-kapitalistischen G.Einzelne Formen der G werden von MARX undENGELS dem Inhalt nach angesprochen, etwa öffent-liche Unternehmen: so wird in den Forderungen derKommunistischen Partei in Deutschland 1848 dieVerstaatlichung des Transport-, Verkehrs- und Kom-munikationswesens verlangt, verbunden mit dempreispolitischen Konzept des ›Nulltarifs‹: die betref-fenden öffentlichen Dienstleistungen sollen »derunbemittelten Klasse zur unentgeltlichen Verfügunggestellt« werden (MEW 5, 4; vgl. 4, 373f).Die meisten der für die G-Thematik relevantenAusführungen beziehen sich auf genossenschaftlicharbeitende »Kooperativfabriken«. MARX widmet sichder Problematik von isolierten oder sektoral begrenz-ten Genossenschaftsunternehmen, die den privat-wirtschaftlichen ›Eigennutz‹ zunächst nur im Innen-verhältnis der Kooperativ-Mitglieder überwindenkönnen. Ein umfassendes und gesamtgesellschaftlichrationales System freier Kooperativarbeit hingegenlässt sich Marx zufolge nicht ohne gesellschaftlicheVeränderungen mit dem Übergang der Staatsmachtin die Hände der Produzenten selbst verwirklichen(Inauguraladresse, MEW 16, 11, 195f; Gotha, MEW19, 13-32). ENGELS spricht sich in späteren Jahrenmehrfach für genossenschaftliche Produktionsbe-triebe aus (z.B. MEW 36, 261, 426), freilich nicht imSinne einer harmonistischen G-Konzeption, bei der
... so far
a bit late as the PDFBox issue PDFBOX-2548 opened in parallel already explained quite a bit, but here as a wrap-up:
To sum it up: The creation process of the first sample PDF used ligatures followed by actual space characters and insertion point movements. Whether this is due to programs in this process not properly supporting OpenType fonts (as the OP assumes) or some other weakness, cannot be decided based on the output PDFs alone.
To fix this issue, you should fix the document creation process. If that is not possible, you can try to enhance PDFBox to understand the weirdness created by that process but this is non-trivial and/or error-prone.
In detail:
when the charater sequences "fi" or "fl" occur in the text, the PDFTextStripper#getText(PDDocument doc) extracts them as single characters: 'fi' and 'fl' and sets a space character on their right side.
A section of the first sample document test.pdf containing samples for both is this
with Spezifizierung and begrifflich.
The first thing to do in case of text extraction troubles usually is copying&pasting from Adobe Reader as that software is quite proficient in text extraction matters. We get:
In einer Spezifi zierung des
...
begriffl ich so aufzuklären
So Adobe Reader does extract these unwanted space characters, too! This usually means that there is some issue in the PDF, not in the text extractor.
Looking at the operations drawing the text we see:
[(4.1 In einer Spezifi)305.505( )-20.3063(zierung des logisch-historischen )]TJ
This means that after drawing "Spezifi" the text insertion point is moved back by 0.3 text space units, then a space character is drawn, then the text insertion point is moved forward by 0.02 text space units, and then the rest of the line is drawn.
(begriffl)Tj
24.1273 0 Td
1.9264 Tw
[( )168.494(ich so aufzuklären, dass dem entwicklungs-)]TJ
Similarly here after drawing "begriffl" the text insertion point is moved forward by 0.024 text space units, the the word spacing is changed to nearly 2 unscaled text space units (i.e. the width of a space character is increased by that amount), then a space character is drawn, then the text insertion point is moved backwards by 0.17 text space units and then the rest of the line is drawn.
Thus, in both cases there indeed is a single ligature glyph followed by a space character, just as PDFBox returns.
My assumption is that the advantage of the underlying OpenFont type turns into this particular disadvantage, because the PDFTextStripper recognizes the character sequence f i / f l as special charcters fi / fl (- what might have to do with the fact, that the getText() method calculates things like whitespace characters by distances / positional placements).
No, it is not a weirdness of the PDFBox or Adobe Reader text extraction routines, it is a weirdness of the PDF creation process.
Surprisingly, if I access the list of characters of a page via the charactersByArticle field of PDFTextStripper / via the PDFTextStripper#processText(TextPosition pos) method, the same characters show up as 'normal-single' characters f i / f l
At some point PDFBox does expand the ligatures to their participant letters, as mentioned in PDFBOX-2548 this happens by design. Whether the choice of which methods return ligatures and which individual letters is a good one and a properly documented one, might be a different matter.
I added a second test page, from a former volume of the same wordbook. For this volume, a Type1 font has been used. I chose a page where the two words "begrifflich" and "spezifisch" occur (they cause problems as you can see in the first test). As you can see/test, the described error doesn't occur when extracting the text of this second page! This strenghens my assumption that the OpenType format is the reason for the occuring error.
Looking at the text drawing operations in test2.pdf
[(begrifflich adaptiert und im Sinne eines n)20.2892(i)20.3857(c)20.4141(h)20.3148(t)20.3801(-)20.4198(k)20.3148(a)20.4141(p)]TJ
....
(druck im engeren Sinne eine spezifische, vornehmlich)Tj
In this document there is no such weird ligature and space character use as in the first one. Thus, no reason for PDFBox (or Adobe Reader) to see such space characters.
My question: is there anything what I can do to avoid this problem?
Fix the document creation process.
If that is not possible, you might try and change your class derived from PDFTextStripper
either to ignore all TextPosition instances containing space characters (including the unwanted ones) and lateron deduce correct space characters by gaps or
check all recognized spaces for overlapping letters.
The former alternative is easier to implement but somewhat error prone, especially in densely typeset documents, the latter one more difficult to implement but less error prone.