📄 attribute.java
字号:
* Tests if the attribute is a string. * * @return true if the attribute is a string */ public final boolean isString() { return (m_Type == STRING); } /** * Tests if the attribute is a date type. * * @return true if the attribute is a date type */ public final boolean isDate() { return (m_Type == DATE); } /** * Returns the attribute's name. * * @return the attribute's name as a string */ public final String name() { return m_Name; } /** * Returns the number of attribute values. Returns 0 for numeric attributes. * * @return the number of attribute values */ public final int numValues() { if (!isNominal() && !isString()) { return 0; } else { return m_Values.size(); } } /** * Returns a description of this attribute in ARFF format. Quotes * strings if they contain whitespace characters, or if they * are a question mark. * * @return a description of this attribute as a string */ public final String toString() { StringBuffer text = new StringBuffer(); text.append("@attribute " + Utils.quote(m_Name) + " "); switch (m_Type) { case NOMINAL: text.append('{'); Enumeration enum = enumerateValues(); while (enum.hasMoreElements()) { text.append(Utils.quote((String) enum.nextElement())); if (enum.hasMoreElements()) text.append(','); } text.append('}'); break; case NUMERIC: text.append("numeric"); break; case STRING: text.append("string"); break; case DATE: text.append("date ").append(Utils.quote(m_DateFormat.toPattern())); break; default: text.append("UNKNOWN"); break; } return text.toString(); } /** * Returns the attribute's type as an integer. * * @return the attribute's type. */ public final int type() { return m_Type; } /** * Returns a value of a nominal or string attribute. * Returns an empty string if the attribute is neither * nominal nor a string attribute. * * @param valIndex the value's index * @return the attribute's value as a string */ public final String value(int valIndex) { if (!isNominal() && !isString()) { return ""; } else { Object val = m_Values.elementAt(valIndex); // If we're storing strings compressed, uncompress it. if (val instanceof SerializedObject) { val = ((SerializedObject)val).getObject(); } return (String) val; } } /** * Constructor for a numeric attribute with a particular index. * * @param attributeName the name for the attribute * @param index the attribute's index */ Attribute(String attributeName, int index) { this(attributeName); m_Index = index; } /** * Constructor for date attributes with a particular index. * * @param attributeName the name for the attribute * @param dateFormat a string suitable for use with * SimpleDateFormatter for parsing dates. Null for a default format * string. * @param index the attribute's index */ Attribute(String attributeName, String dateFormat, int index) { this(attributeName, dateFormat); m_Index = index; } /** * Constructor for nominal attributes and string attributes with * a particular index. * If a null vector of attribute values is passed to the method, * the attribute is assumed to be a string. * * @param attributeName the name for the attribute * @param attributeValues a vector of strings denoting the attribute values. * Null if the attribute is a string attribute. * @param index the attribute's index */ Attribute(String attributeName, FastVector attributeValues, int index) { this(attributeName, attributeValues); m_Index = index; } /** * Adds a string value to the list of valid strings for attributes * of type STRING and returns the index of the string. * * @param value The string value to add * @return the index assigned to the string, or -1 if the attribute is not * of type Attribute.STRING */ public int addStringValue(String value) { if (!isString()) { return -1; } Object store = value; if (value.length() > STRING_COMPRESS_THRESHOLD) { try { store = new SerializedObject(value, true); } catch (Exception ex) { System.err.println("Couldn't compress string attribute value -" + " storing uncompressed."); } } Integer index = (Integer)m_Hashtable.get(store); if (index != null) { return index.intValue(); } else { int intIndex = m_Values.size(); m_Values.addElement(store); m_Hashtable.put(store, new Integer(intIndex)); return intIndex; } } /** * Adds a string value to the list of valid strings for attributes * of type STRING and returns the index of the string. This method is * more efficient than addStringValue(String) for long strings. * * @param src The Attribute containing the string value to add. * @param int index the index of the string value in the source attribute. * @return the index assigned to the string, or -1 if the attribute is not * of type Attribute.STRING */ public int addStringValue(Attribute src, int index) { if (!isString()) { return -1; } Object store = src.m_Values.elementAt(index); Integer oldIndex = (Integer)m_Hashtable.get(store); if (oldIndex != null) { return oldIndex.intValue(); } else { int intIndex = m_Values.size(); m_Values.addElement(store); m_Hashtable.put(store, new Integer(intIndex)); return intIndex; } } /** * Adds an attribute value. Creates a fresh list of attribute * values before adding it. * * @param value the attribute value */ final void addValue(String value) { m_Values = (FastVector)m_Values.copy(); m_Hashtable = (Hashtable)m_Hashtable.clone(); forceAddValue(value); } /** * Produces a shallow copy of this attribute with a new name. * * @param newName the name of the new attribute * @return a copy of this attribute with the same index */ final Attribute copy(String newName) { Attribute copy = new Attribute(newName); copy.m_Index = m_Index; copy.m_DateFormat = m_DateFormat; copy.m_Type = m_Type; copy.m_Values = m_Values; copy.m_Hashtable = m_Hashtable; copy.setMetadata(m_Metadata); return copy; } /** * Removes a value of a nominal or string attribute. Creates a * fresh list of attribute values before removing it. * * @param index the value's index * @exception IllegalArgumentException if the attribute is not nominal */ final void delete(int index) { if (!isNominal() && !isString()) throw new IllegalArgumentException("Can only remove value of" + "nominal or string attribute!"); else { m_Values = (FastVector)m_Values.copy(); m_Values.removeElementAt(index); Hashtable hash = new Hashtable(m_Hashtable.size()); Enumeration enum = m_Hashtable.keys(); while (enum.hasMoreElements()) { Object string = enum.nextElement(); Integer valIndexObject = (Integer)m_Hashtable.get(string); int valIndex = valIndexObject.intValue(); if (valIndex > index) { hash.put(string, new Integer(valIndex - 1)); } else if (valIndex < index) { hash.put(string, valIndexObject); } } m_Hashtable = hash; } } /** * Adds an attribute value. * * @param value the attribute value */ final void forceAddValue(String value) { Object store = value; if (value.length() > STRING_COMPRESS_THRESHOLD) { try { store = new SerializedObject(value, true); } catch (Exception ex) { System.err.println("Couldn't compress string attribute value -" + " storing uncompressed."); } } m_Values.addElement(store); m_Hashtable.put(store, new Integer(m_Values.size() - 1)); } /** * Sets the index of this attribute. * * @param the index of this attribute */ final void setIndex(int index) { m_Index = index; } /** * Sets a value of a nominal attribute or string attribute. * Creates a fresh list of attribute values before it is set. * * @param index the value's index * @param string the value * @exception IllegalArgumentException if the attribute is not nominal or * string. */ final void setValue(int index, String string) { switch (m_Type) { case NOMINAL: case STRING: m_Values = (FastVector)m_Values.copy(); m_Hashtable = (Hashtable)m_Hashtable.clone(); Object store = string; if (string.length() > STRING_COMPRESS_THRESHOLD) { try { store = new SerializedObject(string, true); } catch (Exception ex) { System.err.println("Couldn't compress string attribute value -" + " storing uncompressed."); } } m_Hashtable.remove(m_Values.elementAt(index)); m_Values.setElementAt(store, index); m_Hashtable.put(store, new Integer(index)); break; default: throw new IllegalArgumentException("Can only set values for nominal" + " or string attributes!"); } } public String formatDate(double date) { switch (m_Type) { case DATE: return m_DateFormat.format(new Date((long)date)); default: throw new IllegalArgumentException("Can only format date values for date" + " attributes!"); } } public double parseDate(String string) throws ParseException { switch (m_Type) { case DATE: long time = m_DateFormat.parse(string).getTime(); // TODO put in a safety check here if we can't store the value in a double. return (double)time; default: throw new IllegalArgumentException("Can only parse date values for date" + " attributes!"); } } /** * Returns the properties supplied for this attribute. * * @return metadata for this attribute */ public final ProtectedProperties getMetadata() { return m_Metadata; } /** * Returns the ordering of the attribute. One of the following: * * ORDERING_SYMBOLIC - attribute values should be treated as symbols. * ORDERING_ORDERED - attribute values have a global ordering. * ORDERING_MODULO - attribute values have an ordering which wraps. * * @return the ordering type of the attribute */ public final int ordering() { return m_Ordering; } /** * Returns whether the attribute values are equally spaced. * * @return whether the attribute is regular or not */ public final boolean isRegular() { return m_IsRegular; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -